<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.caminobrowser.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mento</id>
	<title>Camino Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.caminobrowser.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mento"/>
	<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/Special:Contributions/Mento"/>
	<updated>2026-06-09T09:56:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.4</generator>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8941</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8941"/>
		<updated>2008-03-25T03:05:00Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Other things to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
Note that in some cases, a minibranch will be reused for an emergency release.  For example, &amp;lt;code&amp;gt;CAMINO_1_6_B1_MINIBRANCH&amp;lt;/code&amp;gt; was used for both Camino 1.6b1 and the emergency followup release, 1.6b2.  With such a release, you should simply check out a copy of the minibranch and then skip to the [[#Land other changes on the minibranch|land changes]] section to update it as needed.&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
With recent branches, often the only change after the &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; change is to update the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 echo 1.6b3 &amp;gt; camino/config/version.txt&lt;br /&gt;
 cvs commit -m &amp;quot;Numbers for Camino 1.6b3&amp;quot; client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
On recent branches, if you&amp;amp;rsquo;ve been following this guide, by the time you run the release checklist, there shouldn&amp;amp;rsquo;t be any actual work to do.  It should be a simple verification that the source tree is ready for a release.&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko or Firefox release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;br /&gt;
* Don&amp;amp;rsquo;t forget to restore the Tinderbox configuration in &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt; and force &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload its configuration with &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;, as described in the [[#Make Tinderbox build it|Make Tinderbox build it]] section.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8940</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8940"/>
		<updated>2008-03-25T03:04:26Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Other things to do */ Note to not forget to restore multi-config.pl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
Note that in some cases, a minibranch will be reused for an emergency release.  For example, &amp;lt;code&amp;gt;CAMINO_1_6_B1_MINIBRANCH&amp;lt;/code&amp;gt; was used for both Camino 1.6b1 and the emergency followup release, 1.6b2.  With such a release, you should simply check out a copy of the minibranch and then skip to the [[#Land other changes on the minibranch|land changes]] section to update it as needed.&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
With recent branches, often the only change after the &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; change is to update the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 echo 1.6b3 &amp;gt; camino/config/version.txt&lt;br /&gt;
 cvs commit -m &amp;quot;Numbers for Camino 1.6b3&amp;quot; client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
On recent branches, if you&amp;amp;rsquo;ve been following this guide, by the time you run the release checklist, there shouldn&amp;amp;rsquo;t be any actual work to do.  It should be a simple verification that the source tree is ready for a release.&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko or Firefox release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;br /&gt;
* Don&amp;amp;rsquo;t forget to restore the Tinderbox configuration in &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;, as described in the [[#Make Tinderbox build it]] section.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8939</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8939"/>
		<updated>2008-03-25T03:00:33Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Tag it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
Note that in some cases, a minibranch will be reused for an emergency release.  For example, &amp;lt;code&amp;gt;CAMINO_1_6_B1_MINIBRANCH&amp;lt;/code&amp;gt; was used for both Camino 1.6b1 and the emergency followup release, 1.6b2.  With such a release, you should simply check out a copy of the minibranch and then skip to the [[#Land other changes on the minibranch|land changes]] section to update it as needed.&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
With recent branches, often the only change after the &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; change is to update the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 echo 1.6b3 &amp;gt; camino/config/version.txt&lt;br /&gt;
 cvs commit -m &amp;quot;Numbers for Camino 1.6b3&amp;quot; client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
On recent branches, if you&amp;amp;rsquo;ve been following this guide, by the time you run the release checklist, there shouldn&amp;amp;rsquo;t be any actual work to do.  It should be a simple verification that the source tree is ready for a release.&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko or Firefox release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8938</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8938"/>
		<updated>2008-03-25T02:58:16Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Fork a minibranch */ Note reuse of minibranch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
Note that in some cases, a minibranch will be reused for an emergency release.  For example, &amp;lt;code&amp;gt;CAMINO_1_6_B1_MINIBRANCH&amp;lt;/code&amp;gt; was used for both Camino 1.6b1 and the emergency followup release, 1.6b2.  With such a release, you should simply check out a copy of the minibranch and then skip to the [[#Land other changes on the minibranch|land changes]] section to update it as needed.&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
With recent branches, often the only change after the &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; change is to update the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 echo 1.6b3 &amp;gt; camino/config/version.txt&lt;br /&gt;
 cvs commit -m &amp;quot;Numbers for Camino 1.6b3&amp;quot; client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
On recent branches, if you&amp;amp;rsquo;ve been following this guide, by the time you run the release checklist, there shouldn&amp;amp;rsquo;t be any actual work to do.  It should be a simple verification that the source tree is ready for a release.&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8937</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8937"/>
		<updated>2008-03-25T02:54:32Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Release checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
With recent branches, often the only change after the &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; change is to update the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 echo 1.6b3 &amp;gt; camino/config/version.txt&lt;br /&gt;
 cvs commit -m &amp;quot;Numbers for Camino 1.6b3&amp;quot; client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
On recent branches, if you&amp;amp;rsquo;ve been following this guide, by the time you run the release checklist, there shouldn&amp;amp;rsquo;t be any actual work to do.  It should be a simple verification that the source tree is ready for a release.&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8936</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8936"/>
		<updated>2008-03-25T02:52:19Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Land other changes on the minibranch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
With recent branches, often the only change after the &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; change is to update the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 echo 1.6b3 &amp;gt; camino/config/version.txt&lt;br /&gt;
 cvs commit -m &amp;quot;Numbers for Camino 1.6b3&amp;quot; client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8935</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8935"/>
		<updated>2008-03-25T02:51:19Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Land other changes on the minibranch */ Reflect current practices&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
With recent branches, often the only change after the &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; change is to update the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 echo 1.6b3 &amp;gt; camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8934</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8934"/>
		<updated>2008-03-25T02:48:50Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Fork a minibranch */ Indicate that recent branches need minimal minibranching action&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
With recent branches, it is often only necessary to minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; and the Camino version file:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
 cvs update -r CAMINO_1_6_B3_MINIBRANCH client.mk camino/config/version.txt&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8933</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8933"/>
		<updated>2008-03-25T02:27:57Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Fork a minibranch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always needs to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Sam to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8552</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8552"/>
		<updated>2007-11-28T21:13:25Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Create a source release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 rm .mozconfig.mk .mozconfig.out&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar --owner 0 --group 0 -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8424</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8424"/>
		<updated>2007-10-10T18:42:10Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Check out the source */ Point bonsai to a live file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/config/version.txt bonsai] (or [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js this link] for older branches) to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Development:Planning:Software_Update&amp;diff=8252</id>
		<title>Development:Planning:Software Update</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Development:Planning:Software_Update&amp;diff=8252"/>
		<updated>2007-08-22T17:48:15Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Requirements==&lt;br /&gt;
* can build in a 10.3/10.3.9 SDK/gcc3.3 and 10.4/10.4u/gcc4 Universal configuration&lt;br /&gt;
* Compatible license&lt;br /&gt;
* Approval to land in cvs (if not using mozUpdate) - mento prefers landing source code instead of binary drops&lt;br /&gt;
* https capabilities&lt;br /&gt;
** Everything needs to be either https or signed (signing is an option for the Sparkle downloads, but there&amp;#039;s a logistical issue that would come with that)&lt;br /&gt;
* Update checking (OS version, etc.)&lt;br /&gt;
** say, 1.6.x updates to 2.0.x at some point unless you&amp;#039;re running 10.3, in which case you only get 1.6.x updates&lt;br /&gt;
** and if you move to 10.4, do you get re-offered 2.0.x&lt;br /&gt;
* provide a way to turn off update checking from inside the app (unlike adium - with apologies to cbarrett for the jab)&lt;br /&gt;
* one thing i don&amp;#039;t like about sparkle is that it doesn&amp;#039;t check to see if you have permission to update the app first&lt;br /&gt;
* We should only enable update checking in official release builds&lt;br /&gt;
&lt;br /&gt;
== Potential requirements==&lt;br /&gt;
* Resuming lost connections&lt;br /&gt;
* Background/throttled downloads?&lt;br /&gt;
&lt;br /&gt;
==Concerns==&lt;br /&gt;
* QA&lt;br /&gt;
* Generation&lt;br /&gt;
* Gecko&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Development:Planning:Software_Update&amp;diff=8251</id>
		<title>Development:Planning:Software Update</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Development:Planning:Software_Update&amp;diff=8251"/>
		<updated>2007-08-22T17:46:34Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Requirements==&lt;br /&gt;
* can build in a 10.3/10.3.9 SDK/gcc3.3 and 10.4/10.4u/gcc4 Universal configuration&lt;br /&gt;
* Compatible license&lt;br /&gt;
* Approval to land in cvs (if not using mozUpdate)&lt;br /&gt;
* https capabilities&lt;br /&gt;
** Everything needs to be either https or signed (signing is an option for the Sparkle downloads, but there&amp;#039;s a logistical issue that would come with that)&lt;br /&gt;
* Update checking (OS version, etc.)&lt;br /&gt;
** say, 1.6.x updates to 2.0.x at some point unless you&amp;#039;re running 10.3, in which case you only get 1.6.x updates&lt;br /&gt;
** and if you move to 10.4, do you get re-offered 2.0.x&lt;br /&gt;
* provide a way to turn off update checking from inside the app (unlike adium - with apologies to cbarrett for the jab)&lt;br /&gt;
* one thing i don&amp;#039;t like about sparkle is that it doesn&amp;#039;t check to see if you have permission to update the app first&lt;br /&gt;
* We should only enable update checking in official release builds&lt;br /&gt;
&lt;br /&gt;
== Potential requirements==&lt;br /&gt;
* Resuming lost connections&lt;br /&gt;
* Background/throttled downloads?&lt;br /&gt;
&lt;br /&gt;
==Concerns==&lt;br /&gt;
* QA&lt;br /&gt;
* Generation&lt;br /&gt;
* Gecko&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8208</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8208"/>
		<updated>2007-08-10T19:23:18Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Tag it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js bonsai] to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part used to be crappy and top-secret, and fortunately, it’s no longer necessary now that tinderbox can use &amp;lt;code&amp;gt;$UsePrebuiltTalkback&amp;lt;/code&amp;gt;.  The old procedure is included here to confuse you.  We used to need to tag the Talkback tree too, so that tinderbox would get the right stuff.  We only had access to that from the tinderbox itself.  I’m not going to tell you what we used for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you could have found it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8207</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8207"/>
		<updated>2007-08-10T18:50:35Z</updated>

		<summary type="html">&lt;p&gt;Mento: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js bonsai] to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  &amp;quot; \&lt;br /&gt;
               &amp;quot;Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it’s pointless.  If using a Gecko release branch (recommended), you probably won’t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It’s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8206</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8206"/>
		<updated>2007-08-10T18:46:22Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Fork a minibranch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js bonsai] to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
This usage only branches the individual files which will be modified from the base tag(s) for inclusion in the release tag:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cvs update -r CAMINO_1_5_1_MINIBRANCH \&lt;br /&gt;
   client.mk \&lt;br /&gt;
   camino/Info-Camino.plist \&lt;br /&gt;
   camino/Info-CaminoStatic.plist \&lt;br /&gt;
   camino/resources/application/all-camino.js \&lt;br /&gt;
   camino/resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it&amp;#039;s pointless.  If using a Gecko release branch (recommended), you probably won&amp;#039;t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8205</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8205"/>
		<updated>2007-08-10T18:40:20Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Check out the source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js bonsai] to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we’ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
In some cases, it’s not proper to base a Camino release off of an entire Gecko tree.  For example, Camino 1.5.1 is based on &amp;lt;code&amp;gt;FIREFOX_2_0_0_6_RELEASE&amp;lt;/code&amp;gt; in all directories except for &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, which is based on then-current code from &amp;lt;code&amp;gt;CAMINO_1_5_BRANCH&amp;lt;/code&amp;gt;.  To switch the base in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, after the initial checkout above, do:&lt;br /&gt;
&lt;br /&gt;
 cvs update -r CAMINO_1_5_BRANCH -Pd camino&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
If using a &amp;lt;code&amp;gt;GECKO&amp;lt;i&amp;gt;ver&amp;lt;/i&amp;gt;_&amp;lt;i&amp;gt;date&amp;lt;/i&amp;gt;_RELBRANCH&amp;lt;/code&amp;gt; branch (recommended), the best practice is to only minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and to use the Gecko release branch for any other files that need to change.  For example:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r GECKO181_20070501_RELBRANCH camino  # to allow files in mozilla/camino to be updated&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it&amp;#039;s pointless.  If using a Gecko release branch (recommended), you probably won&amp;#039;t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8204</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=8204"/>
		<updated>2007-08-10T18:37:03Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Check out the source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.  (KaiRo has a [http://dev.seamonkey.at/?d=x&amp;amp;i=mozilla&amp;amp;m=t tool] that periodically queries tags, or you can use &amp;lt;code&amp;gt;cvs log&amp;lt;/code&amp;gt; or perhaps even [http://bonsai.mozilla.org/cvsgraph.cgi?file=/mozilla/camino/resources/application/all-camino.js bonsai] to find relevant Gecko tags.)&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).  Note that we&amp;#039;ve been asked not to check in to this branch, even in &amp;lt;code&amp;gt;mozilla/camino&amp;lt;/code&amp;gt;, so our own minibranch (below) is still needed.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
If using a &amp;lt;code&amp;gt;GECKO&amp;lt;i&amp;gt;ver&amp;lt;/i&amp;gt;_&amp;lt;i&amp;gt;date&amp;lt;/i&amp;gt;_RELBRANCH&amp;lt;/code&amp;gt; branch (recommended), the best practice is to only minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and to use the Gecko release branch for any other files that need to change.  For example:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r GECKO181_20070501_RELBRANCH camino  # to allow files in mozilla/camino to be updated&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it&amp;#039;s pointless.  If using a Gecko release branch (recommended), you probably won&amp;#039;t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-06-06:Agenda&amp;diff=7950</id>
		<title>Status Meetings:2007-06-06:Agenda</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-06-06:Agenda&amp;diff=7950"/>
		<updated>2007-06-06T16:13:07Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* General Plans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wed 06 June 9am PST (16:00 GMT/UTC) in #camino-mtg&lt;br /&gt;
&lt;br /&gt;
==General Plans==&lt;br /&gt;
* Camino 1.5&lt;br /&gt;
** Yesterday&lt;br /&gt;
** Sam stayed up all night to deploy the 1.5 website; some non-critical things are still missing but we&amp;#039;ll fill in as time goes on&lt;br /&gt;
** Getting killed by 1passwd (and to a lesser extent CaminoSession)&lt;br /&gt;
*** [http://talkback-public.mozilla.org/reports/camino/CM15/index.html Talkback]&lt;br /&gt;
* Camino 1.0.5&lt;br /&gt;
** Gecko code froze 1 May (same as 1.8[.1])&lt;br /&gt;
** Release set for Tues 19 Jun (post WWDC)&lt;br /&gt;
** We need some patches, reviews, and then landings ([[Releases:1.0.5:Links]]); everything already fixed (with a 180-compatible patch) has landed&lt;br /&gt;
*** Waiting on {{bug|379438}} (1.8.0 fix for password-stealing) patch to get sr&lt;br /&gt;
*** {{bug|175651}} (CJK font Preferences changes don&amp;#039;t select the proper font names) now has r+/sr+; can it land with checkin love, or is a new patch needed?&lt;br /&gt;
** l10n: just drop the 1.5 Keychain.nib into 1.0.5, full-stop, once the patch has landed&lt;br /&gt;
*** a few languages missing from 1.5; ship en nib?&lt;br /&gt;
** relnotes in progress; need to ship to l10n soon&lt;br /&gt;
* Camino 1.6&lt;br /&gt;
** [[Development:Planning:Camino 1.6|Scoping]] (what will we fix, and who will fix them)&lt;br /&gt;
*** will need to re-triage Bugzilla based on the &amp;quot;what will we fix&amp;quot; results&lt;br /&gt;
* [[Development:Summer of Code 2007|SoC 2007]]&lt;br /&gt;
** Began this week&lt;br /&gt;
** See peeja&amp;#039;s AppleScript proposal [[Development:Summer of Code 2007:AppleScript:Proposal|here]]; need scoping meeting on it soon-ish.&lt;br /&gt;
* Tinderboxen&lt;br /&gt;
** past turn-off date, but they&amp;#039;re still running at MoFoCo&lt;br /&gt;
** ss is having fun with &amp;quot;lento&amp;quot; on MozillaTest&lt;br /&gt;
* Bookmark loss&lt;br /&gt;
** start watching for data from newer-than-1.1b builds&lt;br /&gt;
* Weekly Bugs and Queues update&lt;br /&gt;
** These are still in pretty bad shape; we have some action on our 1.0.5/1.5.1 bugs, but everything else is standing still and generating large backlogs.&lt;br /&gt;
&lt;br /&gt;
==Specific bugs that need action==&lt;br /&gt;
=== 1.5.1/1.0.5 (priority) ===&lt;br /&gt;
* {{bug|175651}} - CJK (at least Chinese and Japanese) font Preferences changes not applied to any CJK Web page&lt;br /&gt;
** see above; possibly? ready for checkin on MOZILLA_1_8_0_BRANCH (for 1.0.5), CAMINO_1_5_BRANCH (for 1.5.1), and MOZILLA_1_8_BRANCH (for 1.6)&lt;br /&gt;
** in theory trunk should be OK now, but we need some testing+filing bugs against Core (at the very least, for changing default Core font prefs to Cocoa names)&lt;br /&gt;
&lt;br /&gt;
=== 1.6pre (if there&amp;#039;s time) ===&lt;br /&gt;
* {{bug|381846}} - Selecting a bookmark from the dock menu does not bring application to the front&lt;br /&gt;
** do we want the behavior proposed?&lt;br /&gt;
&lt;br /&gt;
==Queries==&lt;br /&gt;
===Camino 1.6===&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;target_milestone=Camino1.6&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs targeted at 1.6] (144) {{greyText|[+7 since last week]}} &amp;#039;&amp;#039;&amp;#039;we need to re-triage yet based on [[Development:Planning:Camino 1.6]] (when it&amp;#039;s finalized) &amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.6%3F  Blocking ?] (0) {{greyText|[unchanged]}} &amp;lt;!-- subtract FIXED here, except when only FIXED on trunk --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.6%2B  Blocking +] (0) {{greyText|[unchanged]}} &amp;lt;!-- subtract FIXED here--&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.6- Blocking -] (0) {{greyText|[unchanged]}}&amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;target_milestone=---&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs without target] (395) {{greyText|[-2 since last week]}} &amp;#039;&amp;#039;we began untargeting bugs  we touched that are not on the 1.6 roadmap or needing trunk changes&amp;#039;&amp;#039; &amp;lt;!--&amp;#039;&amp;#039;&amp;#039;first “CLOSEME” cleanup in a month&amp;#039;&amp;#039;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;chfieldfrom=2007-05-30&amp;amp;chfieldto=2007-06-06&amp;amp;chfield=resolution&amp;amp;chfieldvalue=FIXED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs fixed since last meeting] (&amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039;) {{greyText|[+10 since last week]}} &amp;lt;!--(all were 1.5-targeted or ad-blocking)&amp;lt;!--, and 1 still needs a branch fix) bugs were 1.6-targeted; 3 were ad-blocking) 1 was trunk-only; 1 was ad-blocking) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Queues==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=review&amp;amp;group=type Review] (6) {{greyText|[-12 since last week]}} &amp;#039;&amp;#039;&amp;#039;4 untargeted&amp;#039;&amp;#039;&amp;#039;&amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=superreview&amp;amp;group=type Superreview] (12) {{greyText|[+6 since last week]}} (1 is our remaining 1.0.5 bug) &amp;lt;!--(only 7 are 1.5 bugs) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-05-06:Agenda&amp;diff=7949</id>
		<title>Status Meetings:2007-05-06:Agenda</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-05-06:Agenda&amp;diff=7949"/>
		<updated>2007-06-06T16:05:27Z</updated>

		<summary type="html">&lt;p&gt;Mento: Status Meetings:2007-05-06:Agenda moved to Status Meetings:2007-06-06:Agenda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Status Meetings:2007-06-06:Agenda]]&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-06-06:Agenda&amp;diff=7948</id>
		<title>Status Meetings:2007-06-06:Agenda</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-06-06:Agenda&amp;diff=7948"/>
		<updated>2007-06-06T16:05:26Z</updated>

		<summary type="html">&lt;p&gt;Mento: Status Meetings:2007-05-06:Agenda moved to Status Meetings:2007-06-06:Agenda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wed 06 June 9am PST (16:00 GMT/UTC) in #camino-mtg&lt;br /&gt;
&lt;br /&gt;
==General Plans==&lt;br /&gt;
* Camino 1.5&lt;br /&gt;
** Yesterday&lt;br /&gt;
** Sam stayed up all night to deploy the 1.5 website; some non-critical things are still missing but we&amp;#039;ll fill in as time goes on&lt;br /&gt;
** Getting killed by 1passwd (and to a lesser extend CaminoSession)&lt;br /&gt;
*** [http://talkback-public.mozilla.org/reports/camino/CM15/index.html Talkback]&lt;br /&gt;
* Camino 1.0.5&lt;br /&gt;
** Gecko code froze 1 May (same as 1.8[.1])&lt;br /&gt;
** Release set for Tues 19 Jun (post WWDC)&lt;br /&gt;
** We need some patches, reviews, and then landings ([[Releases:1.0.5:Links]]); everything already fixed (with a 180-compatible patch) has landed&lt;br /&gt;
*** Waiting on {{bug|379438}} (1.8.0 fix for password-stealing) patch to get sr&lt;br /&gt;
*** {{bug|175651}} (CJK font Preferences changes don&amp;#039;t select the proper font names) now has r+/sr+; can it land with checkin love, or is a new patch needed?&lt;br /&gt;
** l10n: just drop the 1.5 Keychain.nib into 1.0.5, full-stop, once the patch has landed&lt;br /&gt;
*** a few languages missing from 1.5; ship en nib?&lt;br /&gt;
** relnotes in progress; need to ship to l10n soon&lt;br /&gt;
* Camino 1.6&lt;br /&gt;
** [[Development:Planning:Camino 1.6|Scoping]] (what will we fix, and who will fix them)&lt;br /&gt;
*** will need to re-triage Bugzilla based on the &amp;quot;what will we fix&amp;quot; results&lt;br /&gt;
* [[Development:Summer of Code 2007|SoC 2007]]&lt;br /&gt;
** Began this week&lt;br /&gt;
** See peeja&amp;#039;s AppleScript proposal [[Development:Summer of Code 2007:AppleScript:Proposal|here]]; need scoping meeting on it soon-ish.&lt;br /&gt;
* Tinderboxen&lt;br /&gt;
** past turn-off date, but they&amp;#039;re still running at MoFoCo&lt;br /&gt;
** ss is having fun with &amp;quot;lento&amp;quot; on MozillaTest&lt;br /&gt;
* Bookmark loss&lt;br /&gt;
** start watching for data from newer-than-1.1b builds&lt;br /&gt;
* Weekly Bugs and Queues update&lt;br /&gt;
** These are still in pretty bad shape; we have some action on our 1.0.5/1.5.1 bugs, but everything else is standing still and generating large backlogs.&lt;br /&gt;
&lt;br /&gt;
==Specific bugs that need action==&lt;br /&gt;
=== 1.5.1/1.0.5 (priority) ===&lt;br /&gt;
* {{bug|175651}} - CJK (at least Chinese and Japanese) font Preferences changes not applied to any CJK Web page&lt;br /&gt;
** see above; possibly? ready for checkin on MOZILLA_1_8_0_BRANCH (for 1.0.5), CAMINO_1_5_BRANCH (for 1.5.1), and MOZILLA_1_8_BRANCH (for 1.6)&lt;br /&gt;
** in theory trunk should be OK now, but we need some testing+filing bugs against Core (at the very least, for changing default Core font prefs to Cocoa names)&lt;br /&gt;
&lt;br /&gt;
=== 1.6pre (if there&amp;#039;s time) ===&lt;br /&gt;
* {{bug|381846}} - Selecting a bookmark from the dock menu does not bring application to the front&lt;br /&gt;
** do we want the behavior proposed?&lt;br /&gt;
&lt;br /&gt;
==Queries==&lt;br /&gt;
===Camino 1.6===&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;target_milestone=Camino1.6&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs targeted at 1.6] (144) {{greyText|[+7 since last week]}} &amp;#039;&amp;#039;&amp;#039;we need to re-triage yet based on [[Development:Planning:Camino 1.6]] (when it&amp;#039;s finalized) &amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.6%3F  Blocking ?] (0) {{greyText|[unchanged]}} &amp;lt;!-- subtract FIXED here, except when only FIXED on trunk --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.6%2B  Blocking +] (0) {{greyText|[unchanged]}} &amp;lt;!-- subtract FIXED here--&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.6- Blocking -] (0) {{greyText|[unchanged]}}&amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;target_milestone=---&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs without target] (395) {{greyText|[-2 since last week]}} &amp;#039;&amp;#039;we began untargeting bugs  we touched that are not on the 1.6 roadmap or needing trunk changes&amp;#039;&amp;#039; &amp;lt;!--&amp;#039;&amp;#039;&amp;#039;first “CLOSEME” cleanup in a month&amp;#039;&amp;#039;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;chfieldfrom=2007-05-30&amp;amp;chfieldto=2007-06-06&amp;amp;chfield=resolution&amp;amp;chfieldvalue=FIXED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs fixed since last meeting] (&amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039;) {{greyText|[+10 since last week]}} &amp;lt;!--(all were 1.5-targeted or ad-blocking)&amp;lt;!--, and 1 still needs a branch fix) bugs were 1.6-targeted; 3 were ad-blocking) 1 was trunk-only; 1 was ad-blocking) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Queues==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=review&amp;amp;group=type Review] (6) {{greyText|[-12 since last week]}} &amp;#039;&amp;#039;&amp;#039;4 untargeted&amp;#039;&amp;#039;&amp;#039;&amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=superreview&amp;amp;group=type Superreview] (12) {{greyText|[+6 since last week]}} (1 is our remaining 1.0.5 bug) &amp;lt;!--(only 7 are 1.5 bugs) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-05-09:Agenda&amp;diff=7755</id>
		<title>Status Meetings:2007-05-09:Agenda</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-05-09:Agenda&amp;diff=7755"/>
		<updated>2007-05-09T16:15:17Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* General Plans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wed 09 May 9am PST (16:00 GMT/UTC) in #camino-mtg&lt;br /&gt;
&lt;br /&gt;
==General Plans==&lt;br /&gt;
* Camino 1.5&lt;br /&gt;
** [http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/2007-05-01-12-1.5/Camino.dmg release candy] &lt;br /&gt;
** waiting on:&lt;br /&gt;
*** Gecko to be certified OK&lt;br /&gt;
**** respin expected&lt;br /&gt;
*** website (hicks, ss, smokey)&lt;br /&gt;
*** l10n (status at [[Releases:1.5:l10n]])&lt;br /&gt;
**** slowly making progress, it seems, but most teams still not ready&lt;br /&gt;
*** no big bugs or ad-blocking issues&lt;br /&gt;
**** smokey or someone needs to check Talkback&lt;br /&gt;
* Camino 1.0.5&lt;br /&gt;
** Gecko code froze 1 May (same as 1.8[.1])&lt;br /&gt;
** We need some patches, reviews, and then landings ([[Releases:1.0.5:Links]])&lt;br /&gt;
** We&amp;#039;d like to release roughly concurrently with 1.5; depends on&lt;br /&gt;
*** l10n backporting the password stealing UI&lt;br /&gt;
*** patches/landings&lt;br /&gt;
*** relnotes&lt;br /&gt;
* Camino 1.6&lt;br /&gt;
** branching&lt;br /&gt;
** scoping (what will we fix, and who will fix them)&lt;br /&gt;
*** will need to re-triage based on the &amp;quot;what will we fix&amp;quot; results&lt;br /&gt;
* [[Development:Summer of Code 2007|SoC 2007]]&lt;br /&gt;
** begins 28 May&lt;br /&gt;
** need a scoping meeting&lt;br /&gt;
* tinderboxen&lt;br /&gt;
** past turn-off date, but they&amp;#039;re still running at MoFoCo until ss gets internet(?)&lt;br /&gt;
** update on switching nightlies to xserve01 ?&lt;br /&gt;
* Bookmark loss&lt;br /&gt;
* Weekly Bugs and Queues update&lt;br /&gt;
** These will probably build up a bit as we get some early patches for post-1.5 while we finish up 1.0.5 bugs or 1.5-related work&lt;br /&gt;
&lt;br /&gt;
==Specific bugs that need action==&lt;br /&gt;
=== 1.5.1/1.0.5 (priority) ===&lt;br /&gt;
* {{bug|175651}} - CJK (at least Chinese and Japanese) font Preferences changes not applied to any CJK Web page&lt;br /&gt;
*: murph has taken over the patch as of last week (we&amp;#039;d like it for 1.0.5/1.1.1); it seems OK but needs reviews.&lt;br /&gt;
&lt;br /&gt;
=== 1.5+ (if there&amp;#039;s time) ===&lt;br /&gt;
&lt;br /&gt;
==Queries==&lt;br /&gt;
&amp;#039;&amp;#039;on hiatus&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Queues==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=review&amp;amp;group=type Review] (10) {{greyText|[+1 since last week]}} &amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=superreview&amp;amp;group=type Superreview] (3) {{greyText|[+1 since last week]}} &amp;lt;!--(only 7 are 1.5 bugs) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-05-02:Agenda&amp;diff=7713</id>
		<title>Status Meetings:2007-05-02:Agenda</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Status_Meetings:2007-05-02:Agenda&amp;diff=7713"/>
		<updated>2007-05-02T16:09:53Z</updated>

		<summary type="html">&lt;p&gt;Mento: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wed 02 May 9am PST (16:00 GMT/UTC) in #camino-mtg&lt;br /&gt;
&lt;br /&gt;
==General Plans==&lt;br /&gt;
* Camino 1.5&lt;br /&gt;
** zarro boogs found (Mon)&lt;br /&gt;
*** approx. 470 bugs fixed for 1.5, 25 different bug owners&lt;br /&gt;
** [http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/2007-05-01-12-1.5/Camino.dmg release candy] built (Tues)&lt;br /&gt;
** waiting on:&lt;br /&gt;
*** Gecko to be certified OK&lt;br /&gt;
*** website (hicks, ss, smokey)&lt;br /&gt;
*** l10n (status at [[Releases:1.5:l10n]])&lt;br /&gt;
*** no big bugs or ad-blocking issues&lt;br /&gt;
** Immediate to-do:&lt;br /&gt;
*** beta.cb.o&lt;br /&gt;
*** remove &amp;quot;get 1.1b&amp;quot; from cbo&lt;br /&gt;
*** light promotion in reliable circles to get some testing&lt;br /&gt;
* Camino 1.0.5&lt;br /&gt;
** Gecko code froze early Tues AM (same as 1.8[.1])&lt;br /&gt;
** We need some patches, reviews, and then landings&lt;br /&gt;
** We&amp;#039;d like to release roughly concurrently with 1.5; depends on&lt;br /&gt;
*** l10n backporting the password stealing UI&lt;br /&gt;
*** patches/landings&lt;br /&gt;
*** relnotes&lt;br /&gt;
* Camino 1.6&lt;br /&gt;
** branching&lt;br /&gt;
** scoping (what will we fix, and who will fix them)&lt;br /&gt;
** timetable&lt;br /&gt;
* tinderboxen&lt;br /&gt;
** past turn-off date, but they&amp;#039;re still running at MoFoCo until ss gets internet(?)&lt;br /&gt;
** update on switching nightlies to xserve01 ?&lt;br /&gt;
* Bookmark loss&lt;br /&gt;
* Weekly Bugs and Queues update&lt;br /&gt;
** These will probably build up a bit as we get some early patches for post-1.5 while we finish up 1.0.5 bugs or 1.5-related work&lt;br /&gt;
&lt;br /&gt;
==Specific bugs that need action==&lt;br /&gt;
=== 1.5.1/1.0.5 (priority) ===&lt;br /&gt;
* {{bug|175651}} - CJK (at least Chinese and Japanese) font Preferences changes not applied to any CJK Web page&lt;br /&gt;
*: murph has taken over the patch as of last week (we&amp;#039;d like it for 1.0.5/1.1.1); it seems OK but needs reviews.&lt;br /&gt;
*: who can review?  smfr for sr if r+ ?&lt;br /&gt;
&lt;br /&gt;
=== 1.5+ (if there&amp;#039;s time) ===&lt;br /&gt;
* Bugs around the tabs overflow menu ({{bug|376930}})?&lt;br /&gt;
&lt;br /&gt;
==Queries==&lt;br /&gt;
===Camino 1.5===&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;target_milestone=Camino1.5&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs targeted at 1.5] (0) {{greyText|[-4 since last week]}} &amp;lt;!--&amp;#039;&amp;#039;there are several blocking? bugs currently not targeted at 1.5&amp;#039;&amp;#039; --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.5%3F  Blocking ?] (0) {{greyText|[-5 since last week]}} &amp;lt;!-- subtract FIXED here, except when only FIXED on trunk --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.5%2B  Blocking +] (0) {{greyText|[-1 since last week]}} &amp;lt;!-- subtract FIXED here--&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.5- Blocking -] (14) {{greyText|[unchanged]}}&amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;target_milestone=---&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs without target] (309) {{greyText|[-1 since last week]}} &amp;lt;!--&amp;#039;&amp;#039;we began untargeting bugs  we touched that are not on the 1.2 roadmap or needing trunk changes&amp;#039;&amp;#039; &amp;#039;&amp;#039;first “CLOSEME” cleanup in a month&amp;#039;&amp;#039;  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;product=Camino&amp;amp;chfieldfrom=2007-04-25&amp;amp;chfieldto=2007-05-02&amp;amp;chfield=resolution&amp;amp;chfieldvalue=FIXED&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time Bugs fixed since last meeting] (&amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039;) {{greyText|[+5 since last week]}} (all were 1.5-targeted or ad-blocking)&amp;lt;!--, and 1 still needs a branch fix) bugs were 1.5-targeted; 3 were ad-blocking) &amp;lt;!--1 was trunk-only; 1 was ad-blocking) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Queues==&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=review&amp;amp;group=type Review] (9) {{greyText|[+4 since last week]}} &amp;lt;!-- --&amp;gt;&lt;br /&gt;
* [https://bugzilla.mozilla.org/request.cgi?action=queue&amp;amp;requester=&amp;amp;product=Camino&amp;amp;type=superreview&amp;amp;group=type Superreview] (2) {{greyText|[-2 since last week]}} &amp;lt;!--(only 7 are 1.5 bugs) --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7693</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7693"/>
		<updated>2007-05-01T19:58:41Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Release checklist */ New prerelease version scheme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
If using a &amp;lt;code&amp;gt;GECKO&amp;lt;i&amp;gt;ver&amp;lt;/i&amp;gt;_&amp;lt;i&amp;gt;date&amp;lt;/i&amp;gt;_RELBRANCH&amp;lt;/code&amp;gt; branch (recommended), the best practice is to only minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and to use the Gecko release branch for any other files that need to change.  For example:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r GECKO181_20070501_RELBRANCH camino  # to allow files in mozilla/camino to be updated&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+, but this versioning scheme is deprecated.  Under the new scheme, the version number should be updated the the next version expected to be released from the branch, with “pre” appended.  In this example, the version would be updated to 1.0.5pre.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it&amp;#039;s pointless.  If using a Gecko release branch (recommended), you probably won&amp;#039;t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7692</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7692"/>
		<updated>2007-05-01T19:56:22Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Make Tinderbox build it */ List all the variables in tinder-config that need beating&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
If using a &amp;lt;code&amp;gt;GECKO&amp;lt;i&amp;gt;ver&amp;lt;/i&amp;gt;_&amp;lt;i&amp;gt;date&amp;lt;/i&amp;gt;_RELBRANCH&amp;lt;/code&amp;gt; branch (recommended), the best practice is to only minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and to use the Gecko release branch for any other files that need to change.  For example:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r GECKO181_20070501_RELBRANCH camino  # to allow files in mozilla/camino to be updated&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it&amp;#039;s pointless.  If using a Gecko release branch (recommended), you probably won&amp;#039;t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Other significant variables affect the name displayed on the tinderbox status page, and the names of the directories created on the FTP server:&lt;br /&gt;
&lt;br /&gt;
 $BuildNameExtra = &amp;#039;Cm1.0.4&amp;#039;;&lt;br /&gt;
 $milestone     = &amp;quot;1.0.4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7691</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7691"/>
		<updated>2007-05-01T19:03:34Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Tag it */ More tips&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
If using a &amp;lt;code&amp;gt;GECKO&amp;lt;i&amp;gt;ver&amp;lt;/i&amp;gt;_&amp;lt;i&amp;gt;date&amp;lt;/i&amp;gt;_RELBRANCH&amp;lt;/code&amp;gt; branch (recommended), the best practice is to only minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and to use the Gecko release branch for any other files that need to change.  For example:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r GECKO181_20070501_RELBRANCH camino  # to allow files in mozilla/camino to be updated&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)  This is only recommended if the entire tree was forked to make a minibranch, otherwise, it&amp;#039;s pointless.  If using a Gecko release branch (recommended), you probably won&amp;#039;t have forked the entire tree for a minibranch, so this step is safe to skip.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7690</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7690"/>
		<updated>2007-05-01T19:00:31Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Fork a minibranch */ More relbranch tips&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
If using a &amp;lt;code&amp;gt;GECKO&amp;lt;i&amp;gt;ver&amp;lt;/i&amp;gt;_&amp;lt;i&amp;gt;date&amp;lt;/i&amp;gt;_RELBRANCH&amp;lt;/code&amp;gt; branch (recommended), the best practice is to only minibranch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and to use the Gecko release branch for any other files that need to change.  For example:&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r CAMINO_1_5_MINIBRANCH client.mk&lt;br /&gt;
 cvs update -r GECKO181_20070501_RELBRANCH camino  # to allow files in mozilla/camino to be updated&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7689</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7689"/>
		<updated>2007-05-01T18:45:18Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Check out the source */ Identify build team&amp;#039;s new branch scheme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
As of the Gecko 1.8.1.4 and 1.8.0.11 releases, it is possible to base a Camino version on a Gecko release branch forked by the build team.  Camino 1.5 is based on &amp;lt;code&amp;gt;GECKO181_20070501_RELBRANCH&amp;lt;/code&amp;gt;, for example, the release branch for products based on Gecko 1.8.1.4 (Firefox 2.0.0.4).&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:1.5:Notes&amp;diff=7686</id>
		<title>Releases:1.5:Notes</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:1.5:Notes&amp;diff=7686"/>
		<updated>2007-04-30T18:49:59Z</updated>

		<summary type="html">&lt;p&gt;Mento: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{greyText|Apparently, the website used [[Releases:1.5:Notes:Web]] format for the final 1.0 notes, while the Release Notes RTF used a different format :p }}&lt;br /&gt;
&lt;br /&gt;
=About Camino® 1.5=&lt;br /&gt;
After over a year of hard work by devoted volunteers, the Camino Project is proud to give you Camino 1.5. This latest version fixes hundreds of bugs and implements many new features, providing all users with an improved browsing experience.&lt;br /&gt;
&lt;br /&gt;
Camino 1.5 brings you a heavily updated version of the only native Mac OS X browser using Mozilla’s Gecko rendering engine. This release displays web pages with Gecko 1.8.1, the same rendering engine used by the popular Firefox 2 web browser. Gecko 1.8.1 includes thousands of bug fixes over the version used by Camino 1.0, providing users even better web page compatibility.&lt;br /&gt;
&lt;br /&gt;
The features listed below are just some of the many changes in Camino 1.5.&lt;br /&gt;
&lt;br /&gt;
Due to changes in the feature set, Camino 1.5 no longer supports Mac OS X 10.2. We advise users still running Mac OS X 10.2 to download [http://www.caminobrowser.org/download/releases/1.0.4/ Camino 1.0.4] ([http://www.caminobrowser.org/releases/1.0.4.php release notes]).&lt;br /&gt;
&lt;br /&gt;
=Features in Camino 1.5=&lt;br /&gt;
&lt;br /&gt;
The following are the major changes and improvements made since the Camino 1.0 release. A full list is available on our [http://www.caminobrowser.org/releases/1.5-complete.php website].&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Spelling&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Spell-checking using the Mac OS X spelling dictionaries is now enabled in web page text fields.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Feed detection&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** When a web page offers an Atom or RSS feed, Camino will display an icon in the location bar, and clicking the icon will pass the feed to the system’s default feed reading application.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Session restore&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Camino can remember which pages were open when quitting &amp;lt;!--a browsing session --&amp;gt;and restore them the next time it opens.&lt;br /&gt;
** After a browsing session has terminated unexpectedly, Camino will offer to restore the pages which were open previously.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Improved tabbed browsing&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Single-window mode: There is a new option to force links that would open new windows to open in new tabs instead.&lt;br /&gt;
** Tab jumpback: Camino now supports returning to the original tab after viewing a page in a new tab.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Keychain compatibility&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Camino can now share Keychain entries with Safari.&lt;br /&gt;
** Keychain entries saved by Camino are now saved in a way that allows other applications to read them.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pop-up blocking&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** The pop-up blocking notification is now more visible.&lt;br /&gt;
** The new pop-up notification offers more powerful controls for managing pop-ups.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Enhanced plug-in control&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Camino 1.5 includes the ability to disable all plug-ins.&lt;br /&gt;
** Flashblock: The new “Block Flash animations” option prevents Flash from starting until the user clicks Play.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Window zooming&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** The Zoom command now resizes the window to fit the current page’s content instead of making the window full-screen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Downloading&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** A new optional toolbar icon in the Downloads window allows users to move downloaded files to the Trash.&lt;br /&gt;
** Items in the Downloads window can now be automatically removed upon completion or when quitting Camino.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Searching&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** The search field in the toolbar is now resizable.&lt;br /&gt;
** The context menu for selected text in web pages now includes a “Search” item.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cookie management&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Camino now includes an option to accept cookies only for the current session.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;User interface polish&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Camino 1.5 includes a major reorganization of menus and keyboard shortcuts. The preference panes have been redesigned.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Web content&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** Camino now uses version 1.8.1 of Mozilla’s Gecko rendering engine, which contains thousands of bug fixes and support for new technologies like JavaScript 1.7.&lt;br /&gt;
&lt;br /&gt;
=Known Issues=&lt;br /&gt;
For information about other issues or problems, please visit our [http://www.caminobrowser.org/help/ Help page].&lt;br /&gt;
&lt;br /&gt;
* Some users have experienced a situation where pages would appear not to load after clicking on a link. In this case, resizing the browser window may allow the page to display properly.&lt;br /&gt;
&lt;br /&gt;
* Microsoft’s Windows Media Player (WMP) plugin causes major rendering issues in Camino. Since Microsoft has discontinued WMP on Mac OS X, Camino no longer supports the use of the WMP plugin; instead, all users should download the free Flip4Mac (F4M) plugin, version 2.1 or higher, from http://www.flip4mac.com/. Version 2.1 causes pages containing WMP content to become white when scrolled in Camino; there is currently no ETA for a fixed version of the F4M plugin.&lt;br /&gt;
&lt;br /&gt;
* Camino erroneously claims that the default Japanese and Traditional Chinese fonts are “missing” when they are actually installed; this is due to a mismatch between Carbon and Cocoa font names. Changing these fonts using the Camino user interface will result in incorrect fonts being chosen and will cause some characters to fail to display. Users should either keep the default fonts or change the font preferences in the preferences file manually, ensuring the Carbon versions of the font names are used.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Development:Planning:dmg_License_Localization&amp;diff=7633</id>
		<title>Development:Planning:dmg License Localization</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Development:Planning:dmg_License_Localization&amp;diff=7633"/>
		<updated>2007-04-24T19:33:16Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bug|363010}} tracks the initial work to add localized versions of the MoFo EULA to our .dmg.  [[User:smorgan|smorgan]] has taken on the thankless task of preparing the initial version.  Below is the list of outstanding tasks.&lt;br /&gt;
&lt;br /&gt;
==Tasks==&lt;br /&gt;
&lt;br /&gt;
* Determine appropriate smart quotes for Spanish&lt;br /&gt;
* Determine appropriate smart quotes for CJK languages, if relevant:&lt;br /&gt;
** Japanese&lt;br /&gt;
** Simplified Chinese&lt;br /&gt;
** Traditional Chinese&lt;br /&gt;
** Korean&lt;br /&gt;
&lt;br /&gt;
* Determine appropriate smart elipsis for CJK languages, if relevant:&lt;br /&gt;
** Japanese&lt;br /&gt;
** Simplified Chinese&lt;br /&gt;
** Traditional Chinese&lt;br /&gt;
** Korean&lt;br /&gt;
&lt;br /&gt;
* Translations into all 8 languages of the phrase&lt;br /&gt;
*: You are about to install Camino.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Please read the license agreement.  If you agree to its terms and accept, click “Accept” to access the software.  Otherwise, click “Decline” to cancel.&lt;br /&gt;
*:* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;N.B.&amp;#039;&amp;#039;&amp;#039; Quotes here are smart quotes&amp;#039;&amp;#039;&lt;br /&gt;
*:* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;N.B.&amp;#039;&amp;#039;&amp;#039; mento sez: the original Apple samples used “Accept” and “Reject,” for the buttons, which I changed.  I&amp;#039;m pretty sure I rephrased the “You are about…” text as well.&lt;br /&gt;
** French&lt;br /&gt;
** German&lt;br /&gt;
** Italian&lt;br /&gt;
** Spanish&lt;br /&gt;
** Japanese&lt;br /&gt;
** Simplified Chinese&lt;br /&gt;
** Traditional Chinese&lt;br /&gt;
** Korean&lt;br /&gt;
&lt;br /&gt;
* Translations into all 8 languages of the phrase&lt;br /&gt;
*: FOR TRANSLATIONS OF THIS LICENSE INTO SELECTED LANGUAGES, PLEASE VISIT WWW.MOZILLA.ORG/LICENSING.&lt;br /&gt;
** French&lt;br /&gt;
** German&lt;br /&gt;
** Italian&lt;br /&gt;
** Spanish&lt;br /&gt;
** Japanese&lt;br /&gt;
** Simplified Chinese&lt;br /&gt;
** Traditional Chinese&lt;br /&gt;
** Korean&lt;br /&gt;
&lt;br /&gt;
* Informal “sign-off” by caminol10n teams for the 8 languages that the existing non-license text (above the “Camino End-User Software License Agreement” bold line) seems correct and relevant.&lt;br /&gt;
** French&lt;br /&gt;
** German&lt;br /&gt;
** Italian&lt;br /&gt;
** Spanish&lt;br /&gt;
** Japanese&lt;br /&gt;
** Simplified Chinese&lt;br /&gt;
** Traditional Chinese&lt;br /&gt;
** Korean&lt;br /&gt;
&lt;br /&gt;
* Informal “sign-off” by caminol10n teams for the 8 languages that the existing button labels are correct (they should be, since they came from Apple).&lt;br /&gt;
** French&lt;br /&gt;
** German&lt;br /&gt;
** Italian&lt;br /&gt;
** Spanish&lt;br /&gt;
** Japanese&lt;br /&gt;
** Simplified Chinese&lt;br /&gt;
** Traditional Chinese&lt;br /&gt;
** Korean&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7433</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7433"/>
		<updated>2007-03-01T21:18:42Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Have someone else set up Talkback reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can get this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7432</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7432"/>
		<updated>2007-03-01T21:16:04Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Fork a minibranch */ Clarify that the tag isn&amp;#039;t moving on the server when you run |cvs update|&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to change the tag on the files you’ll be working on in your working copy, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7431</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7431"/>
		<updated>2007-03-01T21:05:40Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Tag it */ Clarify “entire Camino tree” compared to “entre repository”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree needed for a Camino build, even NSPR and NSS.  (We don’t need to tag all of Mozilla’s repository, it’s sufficient to tag a full Camino checkout.)&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7430</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7430"/>
		<updated>2007-03-01T21:03:14Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag */ Rename section and provide a link to the client.mk change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the release tag ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  The relevant section of &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; should look something like [http://bonsai.mozilla.org/cvsblame.cgi?file=mozilla/client.mk&amp;amp;rev=CAMINO_1_0_4_RELEASE&amp;amp;mark=241-245#236 this].  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7429</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7429"/>
		<updated>2007-03-01T20:57:27Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Other things to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He’s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7428</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7428"/>
		<updated>2007-03-01T20:56:46Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Other things to do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He&amp;#039;s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL used in Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7427</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7427"/>
		<updated>2007-03-01T20:55:16Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Other things to do */ New bug link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.  If you needed to modify the procedure in any way, now would be an excellent time to update this document.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  [https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&amp;amp;component=Build%20%26%20Release File a bug in the “mozilla.org:Build &amp;amp; Release” component], or e-mail [mailto:build@mozilla.org build@mozilla.org].  If you forget how to accomplish this step, ask Reed.  He&amp;#039;s always happy to remind us.&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL for Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7426</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7426"/>
		<updated>2007-03-01T20:47:45Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Other things to do */ New section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;br /&gt;
&lt;br /&gt;
== Other things to do ==&lt;br /&gt;
&lt;br /&gt;
Your job as a branch tag build release-master is done.  It&amp;#039;s time to sit back, relax, and watch as other people do other things.&lt;br /&gt;
&lt;br /&gt;
* Wait for mirror propagation from &amp;lt;code&amp;gt;stage.mozilla.org&amp;lt;/code&amp;gt; to all of the systems handling &amp;lt;code&amp;gt;releases.mozilla.org&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ftp.mozilla.org&amp;lt;/code&amp;gt;, and other mirrors.&lt;br /&gt;
* Have someone on the build team update bouncer.  File a bug in the “mozilla.org:Build &amp;amp; Release” component, or e-mail [mailto:build@mozilla.org build@mozilla.org].&lt;br /&gt;
* Someone’s got to [[Releases:Website Checklist|update the website]], the web site, or both.&lt;br /&gt;
* Some releases include a “release notes” URL that needs to be populated with content or a redirect.  The release notes URL is defined as &amp;lt;code&amp;gt;ReleaseNotesDefault&amp;lt;/code&amp;gt; in [http://lxr.mozilla.org/mozilla1.8.0/source/camino/resources/application/WebsiteDefaults.strings &amp;lt;code&amp;gt;camino/resources/application/WebsiteDefaults.strings&amp;lt;/code&amp;gt;] and is updated as part of the [[#Release checklist|release checklist]].  The URL for Camino 1.0.4 is [http://www.mozilla.org/products/camino/releases/1.0.4.html], which redirects to [http://www.caminobrowser.org/releases/1.0.4.php].&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7423</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7423"/>
		<updated>2007-03-01T19:41:56Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Release checklist */ I lost my parenthesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch (&amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7422</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7422"/>
		<updated>2007-03-01T19:39:27Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Create a source release */ linku&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide [http://ftp.mozilla.org/pub/mozilla.org/camino/source/ source tarballs] for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7421</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7421"/>
		<updated>2007-03-01T19:36:41Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Create a source release */ Use explicit language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide source tarballs for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs checkout -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7420</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7420"/>
		<updated>2007-03-01T19:34:47Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Land other changes on the minibranch */ blankout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 &lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide source tarballs for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs co -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7419</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7419"/>
		<updated>2007-03-01T19:32:41Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Make Tinderbox build it */ Make more disparaging comments about myself&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the [[#Fix your (my) mistakes|“fix-it”]] section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide source tarballs for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs co -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7418</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7418"/>
		<updated>2007-03-01T19:27:55Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Have someone else set up Talkback reports */ linko&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide source tarballs for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs co -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up [http://talkback-public.mozilla.org/reports/camino/ Talkback reports], at least until [http://code.google.com/p/google-breakpad/ Breakpad] is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7417</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7417"/>
		<updated>2007-03-01T19:25:45Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Create a source release */ Reduce ugly&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide source tarballs for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs co -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it|Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up Talkback reports, at least until Breakpad is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Home_Page&amp;diff=7416</id>
		<title>Releases:Home Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Home_Page&amp;diff=7416"/>
		<updated>2007-03-01T19:23:48Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* General Documents */ Add BTBR&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Camino 1.0 ==&lt;br /&gt;
[[Releases:1.0:Notes]] are the final release notes for 1.0.&lt;br /&gt;
* The complete (full changelog) release notes for 1.0 are here: [[Releases:1.0:Notes Complete]]&lt;br /&gt;
&lt;br /&gt;
[[Releases:1.0:Translation_Status]] gives an overview of where the l10n team was with translating 1.0.&lt;br /&gt;
&lt;br /&gt;
[[Releases:1.0:Press_Coverage]] lists various press outlets which noted our 1.0 release.&lt;br /&gt;
&lt;br /&gt;
* The release promotion information page for 1.0 final are to be found here: [[Releases:1.0:Promotion]] ([[Releases:1.0:Announcement Translations|Translations]])&lt;br /&gt;
&lt;br /&gt;
== Camino 1.0.1 ==&lt;br /&gt;
[[Releases:1.0.1:Links]] gives various useful links for 1.0.1 bug triage and targeting.&lt;br /&gt;
&lt;br /&gt;
[[Releases:1.0.1:Notes]] houses the current release notes for 1.0.1.&lt;br /&gt;
&lt;br /&gt;
== Camino 1.0.2 ==&lt;br /&gt;
[[Releases:1.0.2:Links]] gives various useful links for 1.0.2 bug triage and targeting.&lt;br /&gt;
&lt;br /&gt;
[[Releases:1.0.2:Notes]] houses the current release notes for 1.0.2.&lt;br /&gt;
&lt;br /&gt;
== Camino 1.0.3 ==&lt;br /&gt;
[[Releases:1.0.3:Links]] gives various useful links for 1.0.3 bug triage and targeting.&lt;br /&gt;
&lt;br /&gt;
[[Releases:1.0.3:Notes]] houses the current release notes for 1.0.3.&lt;br /&gt;
&lt;br /&gt;
== Camino 1.0.4 ==&lt;br /&gt;
[[Releases:1.0.4:Links]] gives various useful links for 1.0.4 bug triage and targeting.&lt;br /&gt;
&lt;br /&gt;
[[Releases:1.0.4:Notes]] houses the current release notes for 1.0.4.&lt;br /&gt;
&lt;br /&gt;
== Camino 1.0.5 ==&lt;br /&gt;
[[Releases:1.0.5:Links]] gives various useful links for 1.0.5 bug triage and targeting.&lt;br /&gt;
&lt;br /&gt;
[[Releases:1.0.5:Notes]] houses the current release notes for 1.0.5.&lt;br /&gt;
&lt;br /&gt;
== Camino 1.1 ==&lt;br /&gt;
* [[Releases:1.1a1:Notes]] are the release notes for 1.1a1&lt;br /&gt;
* [[Releases:1.1a2:Notes]] are the release notes for 1.1a2 &lt;br /&gt;
* [[Releases:1.1b:Notes]] are the release notes for 1.1b&lt;br /&gt;
* The running release notes for 1.1 are found here: [[Releases:Release Notes 1.1|Release Notes 1.1]]&lt;br /&gt;
* cb.o/support elements that will need changing are here: [[Website:Documentation Changes for 1.1|Documentation Changes for 1.1]]&lt;br /&gt;
&lt;br /&gt;
== General Documents ==&lt;br /&gt;
* [[Releases:Website Checklist]] lists the various things that need to be completed on the website for each release.&lt;br /&gt;
* [[Releases:Branch Tag Build Release]], the how-to-mento handbook.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7415</id>
		<title>Releases:Branch Tag Build Release</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:Branch_Tag_Build_Release&amp;diff=7415"/>
		<updated>2007-03-01T19:22:15Z</updated>

		<summary type="html">&lt;p&gt;Mento: Just because I wrote this up does NOT mean it&amp;#039;s OK for a bus to hit me&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;How to (branch and tag and build and) release a new version of Camino&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
by Mark Mentovai&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
on 2007-02-28&lt;br /&gt;
&lt;br /&gt;
Pinkerton keeps rooting for me to get hit by a bus.  I’ve had pretty good luck so far, in large part because I’ve abandoned my old habit of running after buses while they’re in motion and banging on the doors, but even so, the specifics of our release procedure probably should be documented.&lt;br /&gt;
&lt;br /&gt;
These instructions correspond to [http://www.caminobrowser.org/releases/1.0.4.php Camino 1.0.4] ([http://www.mozilla.com/en-US/firefox/releases/1.5.0.10.html Gecko 1.8.0.10]).  The base tag for this release was &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt;.  This specifies the apex of the minibranch.  For the 1.0.4 release, changes to that tag for Camino were made on a new &amp;lt;code&amp;gt;CAMINO_1_0_4_MINIBRANCH&amp;lt;/code&amp;gt; branch, and the release tag was &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt;.  Camino branch and release tags follow this convention (&amp;lt;code&amp;gt;CAMINO_1_1_A2_MINIBRANCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAMINO_1_1_B_RELEASE&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Check out the source ==&lt;br /&gt;
&lt;br /&gt;
Instead of a tag, you can also use a branch name, or a branch name with a date.  If using a branch name and a date, use &amp;lt;code&amp;gt;-D&amp;lt;/code&amp;gt; when checking out &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;, and set &amp;lt;code&amp;gt;MOZ_CO_DATE&amp;lt;/code&amp;gt; when making &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;’s &amp;lt;code&amp;gt;checkout&amp;lt;/code&amp;gt; target.&lt;br /&gt;
&lt;br /&gt;
If you’re making a release that corresponds to a Gecko “final” version, be sure to pick up source that doesn’t have a “prerelease” Gecko version number in [http://lxr.mozilla.org/mozilla/source/config/milestone.txt &amp;lt;code&amp;gt;config/milestone.txt&amp;lt;/code&amp;gt;].  Release tags are good for this, but branch snapshots taken at a known freeze time can work too in a pinch.&lt;br /&gt;
&lt;br /&gt;
 cvs checkout -r FIREFOX_1_5_0_10_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
&lt;br /&gt;
== Fork a minibranch ==&lt;br /&gt;
&lt;br /&gt;
This can be done either by branching the entire checked-out tree, or branching individual files as needed.  &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; always need to be minibranched to adjust its tags.  I tend to branch the entire tree if any other files need to change, and to only branch &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; if that’s all that’s changing.  After branching, use &amp;lt;code&amp;gt;cvs update&amp;lt;/code&amp;gt; to move the tag on the files you’ll be working on, so that changes will be committed to the right branch.  The usage here branches everything rooted at the current working directory (&amp;lt;code&amp;gt;mozilla&amp;lt;/code&amp;gt;).  To branch only individual files, add their paths to the command lines.&lt;br /&gt;
&lt;br /&gt;
 cvs tag -b CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH&lt;br /&gt;
&lt;br /&gt;
== Fix your (my) mistakes ==&lt;br /&gt;
&lt;br /&gt;
At this point, I realized that the &amp;lt;code&amp;gt;FIREFOX_1_5_0_10_RELEASE&amp;lt;/code&amp;gt; tag didn’t include changes to two Camino files that had been made recently on the &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in anticipation of Camino 1.0.4.  I realized this because the release notes were missing.  I found the other file by querying [http://bonsai.mozilla.org/ Bonsai].  Here, I updated my local copies of these files to the current 1.8.0 branch versions, and then set the branch tag.  I had to use &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; to move the tag because &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt; had already been branched.  &amp;lt;code&amp;gt;cvs tag -B -F&amp;lt;/code&amp;gt; is dangerous, but I know what I’m doing.  Next time, I’ll remember to check this kind of thing before forking the minibranch.&lt;br /&gt;
&lt;br /&gt;
 cvs update -r MOZILLA_1_8_0_BRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs tag -B -F -b CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
 cvs update -r CAMINO_1_0_4_MINIBRANCH \&lt;br /&gt;
   camino/resources/application/ad_blocking.css \&lt;br /&gt;
   camino/docs/Release\ Notes\ 1-0-4.rtf&lt;br /&gt;
&lt;br /&gt;
== Make &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; apply to the minibranch ==&lt;br /&gt;
&lt;br /&gt;
Now it’s possible to make changes to the working copy.  First, update &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; so that it will pull from the release tag (soon to be created).  In this case, &amp;lt;code&amp;gt;sed&amp;lt;/code&amp;gt; won’t change the NSPR and NSS tags to checked out, but that’s all right, because they’re static tags.  I used to change those too, but now I think it’s clearer to see which NSPR and NSS releases were used by leaving their original tags intact in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt;.  An obvious exception applies when NSPR or NSS files need to change on the minibranch.  Note that I feel entitled to use BS in the more administrative commit messages on my own private minibranch.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/FIREFOX_1_5_0_10_RELEASE/CAMINO_1_0_4_RELEASE/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m The 1.0.4 minibranch is now boarding at gate 1.8.0.10&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
== Land other changes on the minibranch ==&lt;br /&gt;
&lt;br /&gt;
I usually find these by [https://bugzilla.mozilla.org/buglist.cgi?status_whiteboard_type=substring&amp;amp;status_whiteboard=camino-1.0.3 querying Bugzilla for bugs with text like &amp;lt;code&amp;gt;camino-1.0.3&amp;lt;/code&amp;gt;] in the status whiteboard field, by [http://bonsai.mozilla.org/cvsquery.cgi?branch=CAMINO_1_0_3_MINIBRANCH&amp;amp;date=all checking Bonsai for changes I made to the last release minibranch], or by asking [[User:Sardisson|Smokey]] or [[User:Admin|Sam]].  Those guys remember everything.  These two things come from bugs [https://bugzilla.mozilla.org/show_bug.cgi?id=325765 325765] and [https://bugzilla.mozilla.org/show_bug.cgi?id=325964 325964].  When landing things on the minibranch, don’t forget to update the status whiteboard fields of the relevant bugs with text like &amp;lt;code&amp;gt;[camino-1.0.4]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 sed -e s/0x00010006/0x00010008/ \&lt;br /&gt;
   &amp;lt; netwerk/cache/src/nsDiskCache.h &amp;gt; netwerk/cache/src/nsDiskCache.h.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv netwerk/cache/src/nsDiskCache.h.new netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 cvs commit -m &amp;quot;325765 Camino 1.0 versioned its cache as 1.8 while the main 1.8.0 branch versions it as 1.6.  \&lt;br /&gt;
                Use 1.8 to avoid dumping established caches on upgrading from an earlier 1.0.x Camino.&amp;quot; \&lt;br /&gt;
   netwerk/cache/src/nsDiskCache.h&lt;br /&gt;
 patch -p1 &amp;lt; ../mathmlprompt.diff&lt;br /&gt;
 cvs commit -m &amp;quot;325964 MathML missing font dialog contains extra space.  \&lt;br /&gt;
                Patch by Smokey Ardisson &amp;lt;alqahira@mindspring.com&amp;gt;.  r=me sr=rbs&amp;quot; \&lt;br /&gt;
   layout/mathml/base/src/mathfont.properties&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
Run the release checklist in [http://lxr.mozilla.org/mozilla/source/camino/docs/ReleaseChecklist.txt &amp;lt;code&amp;gt;camino/docs/ReleaseChecklist.txt&amp;lt;/code&amp;gt;] to update all of the version numbers.  Then, check it all in.  The release checklist and the set of files it modifies may vary slightly by branch.&lt;br /&gt;
&lt;br /&gt;
 cat camino/docs/ReleaseChecklist.txt&lt;br /&gt;
 cd camino&lt;br /&gt;
 cvs commit -m &amp;quot;Camino 104, position and hold&amp;quot; \&lt;br /&gt;
   Info-Camino.plist \&lt;br /&gt;
   Info-CaminoStatic.plist \&lt;br /&gt;
   installer/Makefile.in \&lt;br /&gt;
   resources/application/ChimeraVersion.r \&lt;br /&gt;
   resources/application/WebsiteDefaults.strings \&lt;br /&gt;
   resources/application/all-camino.js \&lt;br /&gt;
   resources/localized/English.lproj/InfoPlist.strings&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
You also might want to update the version numbers on the parent branch &amp;lt;code&amp;gt;MOZILLA_1_8_0_BRANCH&amp;lt;/code&amp;gt; in this case) to indicate that the branch has advanced beyond the new release.  This time, I updated the above files on the parent branch to give a version number of 1.0.4+.  You don’t have to do this now, it can wait until more pressing tasks are done.&lt;br /&gt;
&lt;br /&gt;
== Tag it ==&lt;br /&gt;
&lt;br /&gt;
We’re set.  Now tag the tree with the release tag, so that &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; actually makes sense.  Regardless of whether the whole tree or just a few files were forked on the minibranch, we always tag the entire tree, even NSPR and NSS.&lt;br /&gt;
&lt;br /&gt;
 cvs tag CAMINO_1_0_4_RELEASE&lt;br /&gt;
&lt;br /&gt;
If someone pulls &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; by the &amp;lt;code&amp;gt;CAMINO_1_0_4_RELEASE&amp;lt;/code&amp;gt; tag, then they’ll get what they expect.  Change the tags in &amp;lt;code&amp;gt;client.mk&amp;lt;/code&amp;gt; on the minibranch to correspond to the minibranch instead of the release tag.  It doesn’t make much of a difference because the new minibranch is a stub-ended branch and the buck stops here, but I’m something of an anal release-master.  (Observe how carefully I placed that hyphen.)&lt;br /&gt;
&lt;br /&gt;
 sed -e s/CAMINO_1_0_4_RELEASE/CAMINO_1_0_4_MINIBRANCH/ \&lt;br /&gt;
   &amp;lt; client.mk &amp;gt; client.mk.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv client.mk.new client.mk&lt;br /&gt;
 cvs commit -m &amp;quot;Please remain seated until your release-master has turned off the fasten seat belt sign.&amp;quot; \&lt;br /&gt;
   client.mk&lt;br /&gt;
&lt;br /&gt;
Now, this part is crappy and top-secret.  We need to tag the Talkback tree too, so that tinderbox gets the right stuff.  And we’ve only got access to that from the tinderbox itself.  I’m not going to tell you what to use for &amp;lt;code&amp;gt;$CVSROOT&amp;lt;/code&amp;gt;, but you can find it in the build log from any true clobber nightly produced by tinderbox.&lt;br /&gt;
&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs checkout -r MOZILLA_1_8_0_BRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag -b CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs update -r CAMINO_1_0_4_MINIBRANCH talkback/fullsoft&lt;br /&gt;
 CVSROOT=something CVS_RSH=ssh \&lt;br /&gt;
   cvs tag CAMINO_1_0_4_RELEASE talkback/fullsoft&lt;br /&gt;
&lt;br /&gt;
== Make Tinderbox build it ==&lt;br /&gt;
&lt;br /&gt;
Everything’s set now.  Configure tinderbox to produce a new build from the release tag.  This is a pain, too, but fortunately, the previous release can be used as a template.  The stupid wildcard in the rsync is to avoid copying the whole source and object trees, which have names beginning with Darwin with a capital D.  Everything else important has a name beginning with a lowercase letter.  rsync is used to preserve symbolic links, of which there are many.&lt;br /&gt;
&lt;br /&gt;
 cd /builds/tinderbox&lt;br /&gt;
 mkdir Cm1.0.4&lt;br /&gt;
 rsync -av Cm1.0.3/[a-z]* Cm1.0.4&lt;br /&gt;
 sed -e s/1\\.0\\.3/1.0.4/ -e s/1_0_3/1_0_4/ \&lt;br /&gt;
   &amp;lt; Cm1.0.4/tinder-config.pl &amp;gt; Cm1.0.4/tinder-config.pl.new &amp;amp;&amp;amp; \&lt;br /&gt;
   mv Cm1.0.4/tinder-config.pl.new Cm1.0.4/tinder-config.pl&lt;br /&gt;
&lt;br /&gt;
It’s possible for tinderbox to build from either a branch or a tag.  The right way is to build releases from tags, but if you’re sure that a tag corresponds exactly to a branch, you can cheat and build from the branch instead.  I usually cheat, but for the purposes of these instructions, I’m doing it the right way.  First, check &amp;lt;code&amp;gt;$BuildTag&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;tinder-config.pl&amp;lt;/code&amp;gt; to make sure it corresponds to your chosen release tag (or branch).  When building from a tag (instead of a branch), pull-by-timestamp (&amp;lt;code&amp;gt;cvs checkout -D&amp;lt;/code&amp;gt;) must be turned off.  It’s useful when building from branches.  Its behavior is controlled by the &amp;lt;code&amp;gt;$UseTimeStamp&amp;lt;/code&amp;gt; tinderbox configuration variable.  This time, I’m using:&lt;br /&gt;
&lt;br /&gt;
 $BuildTag = &amp;#039;CAMINO_1_0_4_RELEASE&amp;#039;;&lt;br /&gt;
 $UseTimeStamp      = 0;      # Use the CVS &amp;#039;pull-by-timestamp&amp;#039; option, or not&lt;br /&gt;
&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt;’ config so that it knows to build the release.  Since we don’t have much spare “room” on the tinderbox, I temporarily disable the base branch build while it’s doing a release.  In this case, I’m commenting out &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; and adding a &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; entry.  Later, when the release is built, I’ll comment out &amp;lt;code&amp;gt;Cm1.0.4&amp;lt;/code&amp;gt; and turn &amp;lt;code&amp;gt;Cm1.0-M1.8.0&amp;lt;/code&amp;gt; back on.  &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; reloads its configuration when it receives a &amp;lt;code&amp;gt;SIGHUP&amp;lt;/code&amp;gt;; when it finishes the build it’s working on, it’ll start over at the top of the list in its config.  For that reason, I like to put the release build I’m doing at the top of &amp;lt;code&amp;gt;multi-config.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 vi /builds/tinderbox/multi-config.pl&lt;br /&gt;
&lt;br /&gt;
The relevant snippet would look something like this:&lt;br /&gt;
&lt;br /&gt;
 $ENV{&amp;#039;CVS_RSH&amp;#039;}=&amp;#039;ssh&amp;#039;;&lt;br /&gt;
 $ENV{&amp;#039;TBOX_CLIENT_CVS_DIR&amp;#039;}=&amp;#039;/builds/cvs/mozilla/tools/tinderbox&amp;#039;;&lt;br /&gt;
 $BuildSleep = 5;&lt;br /&gt;
 $Tinderboxes = [&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.0.4&amp;quot; },&lt;br /&gt;
 #  { tree =&amp;gt; &amp;quot;Cm1.0-M1.8.0&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;Cm1.1-M1.8&amp;quot; },&lt;br /&gt;
   { tree =&amp;gt; &amp;quot;CmTrunk&amp;quot; },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
And then tell &amp;lt;code&amp;gt;multi-tinderbox&amp;lt;/code&amp;gt; to reload when the current build finishes:&lt;br /&gt;
&lt;br /&gt;
 kill -HUP `cat /builds/tinderbox/multi.pid`&lt;br /&gt;
&lt;br /&gt;
When the release build begins, go to the [http://tinderbox.mozilla.org/Camino/ Camino tinderbox page], click “[http://tinderbox.mozilla.org/admintree.cgi?tree=Camino Administrate Tinderbox Trees]” (it should say “Administer,” but whatever), and turn on log scraping for the new build.  Do it before the first build completes.  If you don’t do this step, it’s no big deal, but the (hopefully green, possibly orange or red) box on tinderbox won’t show test results.&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, fix it.  Use the tinderbox logs to your advantage.  If you’ve got to move a tag or something, you can refer to the section above where I fixed &amp;lt;code&amp;gt;ad_blocking.css&amp;lt;/code&amp;gt;, remembering that at this point, you’ve got both a &amp;lt;code&amp;gt;_MINIBRANCH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_RELEASE&amp;lt;/code&amp;gt; tag to worry about.&lt;br /&gt;
&lt;br /&gt;
== Stage it ==&lt;br /&gt;
&lt;br /&gt;
Once the build is done, test it.  It’s not evil to get other people to help test the build with you, just pass them the URL to the “[http://ftp.mozilla.org/pub/mozilla.org/camino/nightly/ nightly]” that tinderbox uploaded.  If it seems reasonable, stage it and let people know.  When possible, it’s nice to let the [http://caminol10n.mozdev.org/ localization team] know that a build is ready and give them time to prepare the multilingual version, and then stage the en-US and multilingual versions together when everything is ready.&lt;br /&gt;
&lt;br /&gt;
 ssh stage.mozilla.org&lt;br /&gt;
 cd /home/ftp/pub/camino/releases&lt;br /&gt;
 cp -p ../nightly/2007-02-28-13-1.0.4/Camino.dmg Camino-1.0.4.dmg&lt;br /&gt;
 chmod 644 Camino-1.0.4.dmg&lt;br /&gt;
 cp -p Camino-1.0.4.dmg en-US&lt;br /&gt;
 rm MD5SUMS&lt;br /&gt;
 LC_ALL=C bash&lt;br /&gt;
 md5sum * &amp;gt; MD5SUMS&lt;br /&gt;
 chmod 644 MD5SUMS&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Stage the source tarball and the multilingual version when they’re ready, too.  The source tarball will go in &amp;lt;code&amp;gt;/home/ftp/pub/camino/source/camino-1.0.4.tar.bz2&amp;lt;/code&amp;gt;, and that directory has an &amp;lt;code&amp;gt;MD5SUMS&amp;lt;/code&amp;gt; file as well.  The multilingual release will go in&lt;br /&gt;
&amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/Camino-1.0.4-MultiLang.dmg&amp;lt;/code&amp;gt;, with a copy at &amp;lt;code&amp;gt;/home/ftp/pub/camino/releases/all/Camino-1.0.4.dmg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Create a source release ==&lt;br /&gt;
&lt;br /&gt;
We provide source tarballs for major releases (not alphas, betas, or release candidates).  Check out a fresh tree using anonymous CVS, so that the &amp;lt;code&amp;gt;CVS/Root&amp;lt;/code&amp;gt; files are correct for people bootstrapping anonymous CVS workspaces.  If the &amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt; file doesn’t wind up at about 33MB (for the 1.8.0 branch), something’s probably wrong.&lt;br /&gt;
&lt;br /&gt;
 touch ~/.cvspass&lt;br /&gt;
 CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot \&lt;br /&gt;
   cvs co -r CAMINO_1_0_4_RELEASE mozilla/client.mk mozilla/camino/config&lt;br /&gt;
 cd mozilla&lt;br /&gt;
 MOZCONFIG=`pwd`/camino/config/mozconfig make -w -f client.mk checkout&lt;br /&gt;
 cd ..&lt;br /&gt;
 chmod -R a+rX mozilla&lt;br /&gt;
 BZIP2=-9 tar -jcf camino-1.0.4.tar.bz2 mozilla&lt;br /&gt;
&lt;br /&gt;
Stage the source release as described above in [[#Stage it]].&lt;br /&gt;
&lt;br /&gt;
== Have someone else set up Talkback reports ==&lt;br /&gt;
&lt;br /&gt;
Ask Jay to set up Talkback reports, at least until Breakpad is ready.  Send him an e-mail with the relevant build information, like:&lt;br /&gt;
&lt;br /&gt;
 VendorID = &amp;quot;MozillaOrg&amp;quot;&lt;br /&gt;
 ProductID = &amp;quot;Camino10&amp;quot;&lt;br /&gt;
 PlatformID = &amp;quot;MacOSX&amp;quot;&lt;br /&gt;
 BuildID = &amp;quot;2007022813&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can find this information from the &amp;lt;code&amp;gt;Contents/MacOS/components/talkback/master.ini&amp;lt;/code&amp;gt; file from &amp;lt;code&amp;gt;Camino.app&amp;lt;/code&amp;gt; in the release you’ve built.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=QA:Hardware_Configurations&amp;diff=5892</id>
		<title>QA:Hardware Configurations</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=QA:Hardware_Configurations&amp;diff=5892"/>
		<updated>2006-07-05T21:40:50Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Project Leads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Who to bug for OS/hardware combinations==&lt;br /&gt;
When you need patch testing or triage help....&lt;br /&gt;
&lt;br /&gt;
===QA/Developers===&lt;br /&gt;
&lt;br /&gt;
*[[User:Froodian|froodian]] - iBook G4 1.33 GHz, 1.25 GB, running OS X 10.4 (latest update)&lt;br /&gt;
*[[User:clawson|clawson]] - PowerBook G4 1.5 GHz, 2 GB, 10.4 (latest update). Kensington Expert Mouse with Kensington drivers.&lt;br /&gt;
*Torben has Macs that run 10.2.8 and 10.3.9&lt;br /&gt;
*smorgan has an iMac Core Duo&lt;br /&gt;
*[[User:Wevah|Wevah]] has a MacBook Pro 2.0 GHz, 2 GB, running 10.4.7&lt;br /&gt;
*[[User:hwaara|hwaara]] has an iMac G5, 1.9 GHz, 1 GB, running latest OS X 10.4. Uses a Mighty Mouse.&lt;br /&gt;
*[[User:kreeger|kreeger]] has an iBook G4 Latest 10.4, access to a 10.3.9 Mac Mini, uses various mice, and has a couple of windows XP/Linux machines.&lt;br /&gt;
*[[User:japser|japser]]&lt;br /&gt;
*[[User:Ludo|Ludo]]&lt;br /&gt;
*BruceD&lt;br /&gt;
*[[User:delliott|delliott]] has a MacBook Core Duo 1.83, 512MB, 10.4&lt;br /&gt;
*[[User:sardisson|sardisson]] - PowerBook G4 1.33 GHz, 1.5 GB, running 10.3.9&lt;br /&gt;
*: can do simple project changes in lieu of pink&amp;#039;s or mento&amp;#039;s Xcode 2.0 Macs&lt;br /&gt;
*[[User:Admin|ss]] - iBook G4 1.2 GHz, 1.25 GB, running 10.4 and Intel Mac mini Core Duo running 10.4.7&lt;br /&gt;
*[[User:Peeja|peeja]] - (for now) iBook G3 900MHz, 384MB, 10.3.9&lt;br /&gt;
&lt;br /&gt;
====Project Leads====&lt;br /&gt;
&amp;#039;&amp;#039;They all have some manner of Intel Mac, plus others&amp;#039;&amp;#039;&lt;br /&gt;
*[[User:pinkerton|pinkerton]] - Has hardware so sweet that he won&amp;#039;t tell us, has both PPC and Intel machines, and uses a Microsoft wheel mouse&lt;br /&gt;
*[[User:mento|mento]] has like seven Macs or something and can run releases as old as 10.1.&lt;br /&gt;
*[[User:smfr|smfr]]&lt;br /&gt;
&lt;br /&gt;
===Community===&lt;br /&gt;
found on [irc://irc.mozilla.org/#camino #camino]&lt;br /&gt;
*[[User:ChrisCasciano|pnhChris]] runs 10.3.9&lt;br /&gt;
* davedit is on 10.4&lt;br /&gt;
* [[User:krmathis|krmathis]] is also on 10.4&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:1.0.2:Links&amp;diff=5606</id>
		<title>Releases:1.0.2:Links</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:1.0.2:Links&amp;diff=5606"/>
		<updated>2006-06-02T20:55:44Z</updated>

		<summary type="html">&lt;p&gt;Mento: (f) you&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Camino 1.0.2 will come from a new minibranch based on Gecko 1.8.0.4.&lt;br /&gt;
&lt;br /&gt;
==Pre-branching checkins==&lt;br /&gt;
The following Camino-only bugs need to be landed before we mini-branch:&lt;br /&gt;
&lt;br /&gt;
* {{bug|336497}} - Writing Spotlight metadata files for Bonjour bookmarks generates thousands of files (also fixes {{bug|335163}})&lt;br /&gt;
&lt;br /&gt;
:ref: [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=VERIFIED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.0.2%2B camino1.0.2+ bugs] - if FIXED, either already landed on &amp;#039;&amp;#039;&amp;#039;1.8.0.4&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; on CAMINO_1_0_1_MINIBRANCH in all cases&amp;#039;&amp;#039;), or ML only&lt;br /&gt;
:landed: mm&lt;br /&gt;
&lt;br /&gt;
==Land on the mini-branch==&lt;br /&gt;
The following bugs need to land on the mini-branch:&lt;br /&gt;
&lt;br /&gt;
* {{Bug|321366}} - Crash [@PR_Close].[@nsDiskCacheStreamIO::Flush()]&lt;br /&gt;
:landed: mm&lt;br /&gt;
* {{Bug|325964}} - MathML missing fonts dialogue contatins extra space character (Camino-only)&lt;br /&gt;
:landed: mm&lt;br /&gt;
* &amp;#039;&amp;#039;Potentially&amp;#039;&amp;#039; aka [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;cmdtype=doit&amp;amp;order=Last+Changed&amp;amp;field0-0-0=flagtypes.name&amp;amp;type0-0-0=equals&amp;amp;value0-0-0=camino1.0.2%3F camino1.0.2?]&lt;br /&gt;
** {{bug|324501}} - Search field input box renders with unnecessary border&lt;br /&gt;
:landed: mm&lt;br /&gt;
&lt;br /&gt;
:ref: [camino-1.0] or [camino-1.0.1] not fixed/verified 1.8.0.1/1.8.0.2/1.8.0.3/1.8.0.4 [https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;long_desc_type=substring&amp;amp;long_desc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;status_whiteboard_type=anywordssubstr&amp;amp;status_whiteboard=%5Bcamino-1.0%5D+%5Bcamino-1.0.1%5D&amp;amp;keywords_type=nowords&amp;amp;keywords=fixed1.8.0.2+verified1.8.0.2+fixed1.8.0.3+verified1.8.0.3+fixed1.8.0.4+verified1.8.0.4&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=exact&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailtype2=exact&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;cmdtype=doit&amp;amp;order=Reuse+same+sort+as+last+time&amp;amp;field0-0-0=noop&amp;amp;type0-0-0=noop&amp;amp;value0-0-0= query] plus the camino1.0.2? query above.&lt;br /&gt;
&lt;br /&gt;
==Land somewhere==&lt;br /&gt;
&lt;br /&gt;
* {{bug|336846}} - Relnotes for 1.0.2&lt;br /&gt;
*: (needs sr/make sure everything they claim is included actually lands)&lt;br /&gt;
:landed: mm&lt;br /&gt;
&lt;br /&gt;
==Also==&lt;br /&gt;
&lt;br /&gt;
* Do the release checklist&lt;br /&gt;
:landed: mm&lt;br /&gt;
* Cache version should be 1.8 for Camino ({{bug|325765}})&lt;br /&gt;
:landed: mm&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caminobrowser.org/index.php?title=Releases:1.0.2:Notes&amp;diff=5605</id>
		<title>Releases:1.0.2:Notes</title>
		<link rel="alternate" type="text/html" href="http://wiki.caminobrowser.org/index.php?title=Releases:1.0.2:Notes&amp;diff=5605"/>
		<updated>2006-06-02T18:26:36Z</updated>

		<summary type="html">&lt;p&gt;Mento: /* Changes since Camino 1.0 */ rectile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Camino 1.0.2==&lt;br /&gt;
Camino 1.0.2 is a security and stability update for Camino 1.0.x; all users are recommended to upgrade.&lt;br /&gt;
&lt;br /&gt;
==Changes since Camino 1.0==&lt;br /&gt;
The following changes and improvements have been made since the Camino 1.0 release.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In Camino 1.0.2, we have made the following changes and improvements since version 1.0.1:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Fixed several critical security issues, including those fixed in version 1.8.0.4 of the Mozilla Gecko rendering engine.&lt;br /&gt;
* Fixed an issue in Camino 1.0.1 where proxy auto-config (PAC) files were ignored.&lt;br /&gt;
* Fixed an issue where Camino’s bookmark metadata could not be added to the list of locations Spotlight is prevented from searching.&lt;br /&gt;
* Fixed an issue where using Camino on a network with many Bonjour hosts could significantly degrade performance.&lt;br /&gt;
* Fixed an issue where Camino would ignore the “Link from other application” tabbed browsing preference in certain cases.&lt;br /&gt;
* Fixed an issue where Camino displayed some search fields on Apple.com incorrectly.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In Camino 1.0.1, we have made the following changes and improvements since version 1.0:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Fixed several critical security issues, including those fixed in version 1.8.0.3 of the Mozilla Gecko rendering engine. &lt;br /&gt;
* Upgraded the bundled [http://javaplugin.sf.net Java Embedding Plugin] to version 0.9.5+d.&lt;br /&gt;
* Improved ad-blocking, especially of German ads.&lt;br /&gt;
* Enabled the opening of local SVG files.&lt;br /&gt;
* Fixed an issue where Camino on Intel-based Macs was unable to read Keychain entries stored by Camino on PowerPC-based Macs.&lt;br /&gt;
&lt;br /&gt;
==Highlights of Camino 1.0==&lt;br /&gt;
Below is a list of the major changes in Camino 1.0. A full list is available on our website.&lt;br /&gt;
&lt;br /&gt;
* General&lt;br /&gt;
** Camino is now a universal binary, allowing it to run natively on both PowerPC- and Intel-based Macs.&lt;br /&gt;
** Moving backward and forward through history is now “blazingly fast”.&lt;br /&gt;
** The “Fill Form” menu item and toolbar button use your personal Address Book card to automatically fill out forms on the current web page.&lt;br /&gt;
** Ad-blocking is now built-in, but turned off by default.&lt;br /&gt;
** The “Camino” menu now has a “Reset Camino…” menu item, which will erase your browsing history, empty the cache, clear downloads, clear all cookies, and clear all site permissions.&lt;br /&gt;
** The “Camino” menu now has an “Empty Cache…” menu item.&lt;br /&gt;
** An optional warning is shown when closing windows with multiple tabs or when quitting with multiple windows open.&lt;br /&gt;
** Camino now has certificate-management capabilities.&lt;br /&gt;
*** It is now possible to trust a new Certificate Authority.&lt;br /&gt;
*** The Certificates window, accessible from the Security preference pane, shows the set of certificates included with Camino and any newly-downloaded certificates.&lt;br /&gt;
** The about:config preference editor is now mostly functional.&lt;br /&gt;
&lt;br /&gt;
* Bookmarks and History&lt;br /&gt;
** Camino now includes live searching of bookmarks and history.&lt;br /&gt;
** It is now possible to sort bookmarks alphabetically.&lt;br /&gt;
** The “Go” menu now displays global history, showing sites you visited in any window, ordered by date.&lt;br /&gt;
** Spotlight will now index Camino bookmarks.&lt;br /&gt;
** Camino now displays custom icons for Bookmarks, History, and local files.&lt;br /&gt;
&lt;br /&gt;
* Tabbed browsing&lt;br /&gt;
** The tab bar has been rewritten from scratch.&lt;br /&gt;
*** Tabs now appear on the left of the window, instead of in the center.&lt;br /&gt;
*** Windows can now contain more than 16 tabs, and tabs which do not fit on the tab bar appear in an overflow menu.&lt;br /&gt;
*** The tab bar can remain visible when a single tab is open.&lt;br /&gt;
** Double-clicking on empty space in the tab bar creates a new tab.&lt;br /&gt;
** Command-enter in the location bar or search field will now open the page or search results in a new tab or new window (instead of the current tab or window). &lt;br /&gt;
&lt;br /&gt;
* Downloading&lt;br /&gt;
** Camino now saves the list of downloads between sessions. &lt;br /&gt;
** Downloads can be paused and resumed.&lt;br /&gt;
&lt;br /&gt;
* Web Content&lt;br /&gt;
** Camino now has support for “document.designMode” (inline HTML editing, also known as Midas), SVG, the &amp;lt;canvas&amp;gt; tag, and MathML.&lt;br /&gt;
** Web page access keys now work in Camino.&lt;br /&gt;
** Camino now uses version 1.8 of Mozilla’s Gecko rendering engine, which contains thousands of bug fixes.&lt;br /&gt;
** Images are drawn and tiled using Core Graphics for improved performance.&lt;br /&gt;
** The pop-up blocker can now stop pop-ups generated by plugins (like Flash).&lt;br /&gt;
&lt;br /&gt;
* Plugins&lt;br /&gt;
** Camino now ships with the Java Embedding Plugin (http://javaplugin.sourceforge.net/), which provides support for Java 1.4. On Mac OS X 10.4, Java 5.0 is also supported.&lt;br /&gt;
&lt;br /&gt;
* Preferences&lt;br /&gt;
** Camino now supports third-party preference panes. These can be installed by placing them into the &amp;lt;tt&amp;gt;~/Library/Application Support/Camino/PreferencePanes&amp;lt;/tt&amp;gt; folder.&lt;br /&gt;
** There is a new preference to make animated images play only once.&lt;br /&gt;
** The cookie and cookie exception lists are now searchable.&lt;br /&gt;
** Camino now uses the language information in the International pane of the System Preferences to send data on what languages you understand to websites. This can be overridden by the “camino.accept_languages” hidden preference.&lt;br /&gt;
** Proxy Auto-Config (PAC) settings are now read from the entries in the Network pane of the System Preferences.&lt;br /&gt;
&lt;br /&gt;
==Known Issues==&lt;br /&gt;
* The recently released RealPlayer 10.1.0 (v400) causes Camino to crash when viewing any Real content. Real has released RealPlayer 10.1.0 (v412) to address this issue.  Users should re-download RealPlayer and verify (using the application’s About window) that it is version 412 before launching Camino.&lt;br /&gt;
&lt;br /&gt;
* Microsoft’s Windows Media Player (WMP) plugin causes major rendering issues in Camino. Since Microsoft has discontinued WMP on Mac OS X, Camino no longer supports the use of the WMP plugin; instead, all users should download the free Flip4Mac (F4M) plugin, version 2.0.2 or higher, from http://www.flip4mac.com/.  Version 2.0.2 causes pages containing WMP content to become white when scrolled in Camino; there is currently no ETA for a fixed version of the F4M plugin.&lt;br /&gt;
&lt;br /&gt;
* Although typing performance has improved in Camino 1.0, typing in form fields can be slow when Flash or animated images are present. Turning off animations can improve performance in some cases.&lt;br /&gt;
&lt;br /&gt;
* Shockwave Director content displays at the wrong location in the browser window when hardware rendering is enabled. Switch the plugin to software rendering to solve this.&lt;br /&gt;
&lt;br /&gt;
* Due to a bug in Mac OS X 10.2.x and 10.3.x, Norwegian users of Camino will need to manually set their &amp;#039;accept-language&amp;#039; string. To set the accept-language string, add the string &amp;lt;tt&amp;gt;user_pref(&amp;quot;camino.accept_languages&amp;quot;, &amp;quot;nb,nn,no,en&amp;quot;);&amp;lt;/tt&amp;gt; to your [http://www.caminobrowser.org/support/hiddenprefs/#createUserjs user.js file], where the languages are listed in the order in which you’d prefer them if a server can send content in multiple languages. (In this example, you want Bokmål first, then Nynorsk, then generic Norwegian, then English if none of the other three languages are available.) You may now launch Camino.&amp;lt;br&amp;gt;Apple fixed this bug in Mac OS X 10.4, so no work-arounds are necessary.&lt;br /&gt;
&lt;br /&gt;
* Camino erroneously claims that the default Japanese and Traditional Chinese fonts are “missing” when they are actually installed; this is due to a mismatch between Carbon and Cocoa font names.  Changing these fonts using the Camino user interface will result in incorrect fonts being chosen and will cause some characters to fail to display.  Users should either keep the default fonts or change the font preferences manually, ensuring the Carbon versions of the font names are used.&lt;br /&gt;
&lt;br /&gt;
* Some users have experienced an issue where downloading files will cause Camino to hang when Quicksilver is installed. Users can work around this issue by either disabling indexing of the Desktop in Quicksilver or by setting the default download location to somewhere other than the Desktop in Camino’s Downloads preferences.&lt;/div&gt;</summary>
		<author><name>Mento</name></author>
		
	</entry>
</feed>