<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Garbas</id>
	<title>MozillaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Garbas"/>
	<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/Special:Contributions/Garbas"/>
	<updated>2026-10-20T07:16:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Template:Version/Gecko/central/current&amp;diff=1202752</id>
		<title>Template:Version/Gecko/central/current</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Template:Version/Gecko/central/current&amp;diff=1202752"/>
		<updated>2018-10-22T17:22:12Z</updated>

		<summary type="html">&lt;p&gt;Garbas: bump version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;65&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Template:Version/Gecko/release/next&amp;diff=1202751</id>
		<title>Template:Version/Gecko/release/next</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Template:Version/Gecko/release/next&amp;diff=1202751"/>
		<updated>2018-10-22T17:21:55Z</updated>

		<summary type="html">&lt;p&gt;Garbas: bump version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;65&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/RelengAPI&amp;diff=1196683</id>
		<title>ReleaseEngineering/Applications/RelengAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/RelengAPI&amp;diff=1196683"/>
		<updated>2018-07-04T20:12:08Z</updated>

		<summary type="html">&lt;p&gt;Garbas: adding obsolete warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Obsolete RelEng Page|Future development of RelEng applications was moved to https://docs.mozilla-releng.net}}&lt;br /&gt;
&lt;br /&gt;
As [[ReleaseEngineering/Applications]] attests, releng has a lot of apps, and many of them have APIs.&lt;br /&gt;
But these APIs are all bespoke implementations, and are not tied to a single endpoint, authentication scheme, etc.&lt;br /&gt;
RelengAPI aims to be the glue that binds all of these apps together, makes it easy to add new ones, and makes it easy for others to build tools that consume releng&#039;s APIs.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
* Simple self-service usage for consumers&lt;br /&gt;
* Simple, rapid implementation of new apps&lt;br /&gt;
* Operations-friendly&lt;br /&gt;
See [https://github.com/mozilla/build-relengapi#goals README.md] for more&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
* Code: https://github.com/mozilla/build-relengapi&lt;br /&gt;
* Deployment: https://api.pub.build.mozilla.org (production) or https://api-pub-build.allizom.org (staging)&lt;br /&gt;
* Documentation: https://api.pub.build.mozilla.org/docs&lt;br /&gt;
* [[ReleaseEngineering/How_To/Update_RelengAPI|How To: Update RelengAPI]]&lt;br /&gt;
&lt;br /&gt;
= Getting Involved =&lt;br /&gt;
&lt;br /&gt;
* IRC: #releng, look for dustin&lt;br /&gt;
* Patches: releng and relops can push directly for now; GitHub pull requests are welcome from others&lt;br /&gt;
* Bugs/RFE&#039;s: Use [https://github.com/mozilla/build-relengapi/issues GitHub issues] for minor issues; for major work that must be tracked within Mozilla, file bugs in &amp;quot;Release Engineering: Other&amp;quot;, cc :dustin&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Clobberer&amp;diff=1196682</id>
		<title>ReleaseEngineering/Applications/Clobberer</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Clobberer&amp;diff=1196682"/>
		<updated>2018-07-04T20:06:11Z</updated>

		<summary type="html">&lt;p&gt;Garbas: improved formatting of the warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Obsolete RelEng Page|With migration to Taskcluster Clobberer is not anymore needed and will be turned off in September, 2018.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Application Description =&lt;br /&gt;
The clobberer allows developers to &amp;quot;clobber&amp;quot; particular build directories (objdirs) on particular slaves.  This is sometimes necessary if a change is committed that is not compatible with previous objdirs, or occasionally when a compile failure results in a bogus objdir.&lt;br /&gt;
&lt;br /&gt;
The application has an outward-facing web interface for developers, and also provides an internal web service which buildslaves contact to determine what build directories they should clobber.&lt;br /&gt;
&lt;br /&gt;
As with all other RelengAPI integrated applications, clobberer is completely API based. For information about its endpoints see:&lt;br /&gt;
&lt;br /&gt;
https://api.pub.build.mozilla.org/clobberer/&lt;br /&gt;
&lt;br /&gt;
* UI&lt;br /&gt;
    * production&lt;br /&gt;
        * https://api.pub.build.mozilla.org/clobberer/ - https&lt;br /&gt;
    * staging&lt;br /&gt;
        * https://api-pub-build.allizom.org/clobberer&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
* two MySQL databases (production and staging)&lt;br /&gt;
* runs on the [https://mana.mozilla.org/wiki/display/websites/Releng+web+cluster releng web cluster]&lt;br /&gt;
&lt;br /&gt;
= Security =&lt;br /&gt;
Clobberer uses the LDAP username verified by RelengAPI&#039;s permissions system.&lt;br /&gt;
&lt;br /&gt;
= Testing/Updating =&lt;br /&gt;
&lt;br /&gt;
Clobberer is a Flask blueprint, and part of the RelengAPI project. For information about Testing/Updating see the project readme: https://github.com/mozilla/build-relengapi-clobberer&lt;br /&gt;
&lt;br /&gt;
= More =&lt;br /&gt;
See [https://mana.mozilla.org/wiki/pages/viewpage.action?pageId=24805981 the websites page]&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Clobberer&amp;diff=1196681</id>
		<title>ReleaseEngineering/Applications/Clobberer</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Clobberer&amp;diff=1196681"/>
		<updated>2018-07-04T20:04:00Z</updated>

		<summary type="html">&lt;p&gt;Garbas: adding deprecation warning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= DEPRECATION WARNING !!! =&lt;br /&gt;
&lt;br /&gt;
With migration to Taskcluster Clobberer is not anymore needed and will be turned off in September, 2018.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Application Description =&lt;br /&gt;
The clobberer allows developers to &amp;quot;clobber&amp;quot; particular build directories (objdirs) on particular slaves.  This is sometimes necessary if a change is committed that is not compatible with previous objdirs, or occasionally when a compile failure results in a bogus objdir.&lt;br /&gt;
&lt;br /&gt;
The application has an outward-facing web interface for developers, and also provides an internal web service which buildslaves contact to determine what build directories they should clobber.&lt;br /&gt;
&lt;br /&gt;
As with all other RelengAPI integrated applications, clobberer is completely API based. For information about its endpoints see:&lt;br /&gt;
&lt;br /&gt;
https://api.pub.build.mozilla.org/clobberer/&lt;br /&gt;
&lt;br /&gt;
* UI&lt;br /&gt;
    * production&lt;br /&gt;
        * https://api.pub.build.mozilla.org/clobberer/ - https&lt;br /&gt;
    * staging&lt;br /&gt;
        * https://api-pub-build.allizom.org/clobberer&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
* two MySQL databases (production and staging)&lt;br /&gt;
* runs on the [https://mana.mozilla.org/wiki/display/websites/Releng+web+cluster releng web cluster]&lt;br /&gt;
&lt;br /&gt;
= Security =&lt;br /&gt;
Clobberer uses the LDAP username verified by RelengAPI&#039;s permissions system.&lt;br /&gt;
&lt;br /&gt;
= Testing/Updating =&lt;br /&gt;
&lt;br /&gt;
Clobberer is a Flask blueprint, and part of the RelengAPI project. For information about Testing/Updating see the project readme: https://github.com/mozilla/build-relengapi-clobberer&lt;br /&gt;
&lt;br /&gt;
= More =&lt;br /&gt;
See [https://mana.mozilla.org/wiki/pages/viewpage.action?pageId=24805981 the websites page]&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Tooltool&amp;diff=1196482</id>
		<title>ReleaseEngineering/Applications/Tooltool</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Tooltool&amp;diff=1196482"/>
		<updated>2018-06-30T02:14:10Z</updated>

		<summary type="html">&lt;p&gt;Garbas: new tooltool url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tooltool basics =&lt;br /&gt;
&lt;br /&gt;
Some of the jobs in the releng infrastructure make use of generic binary artifacts, which are stored in dedicated artifacts repositories.&lt;br /&gt;
&lt;br /&gt;
Tooltool is the client program, written in Python, which is used to retrieve these artifacts from the servers, and to perform integrity checks on them based on hashcode verification. Hence, the servers storing these artifacts are named &amp;quot;tooltool servers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A set of files to be fetched by tooltool is specified via a tooltool manifest, usually a file in JSON format with tt extension.&lt;br /&gt;
&lt;br /&gt;
The following is an example of a valid tooltool manifest:&lt;br /&gt;
&lt;br /&gt;
  [&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;size&amp;quot;: 139308,&lt;br /&gt;
  &amp;quot;digest&amp;quot;: &amp;quot;b2a463249bb3a9e7f2a3604697b000d2393db4f37b623fc099beb8456fbfdb332567013a3131ad138d8633cb19c50a8b77df3990d67500af896cada8b6f698b4&amp;quot;,&lt;br /&gt;
  &amp;quot;algorithm&amp;quot;: &amp;quot;sha512&amp;quot;,&lt;br /&gt;
  &amp;quot;filename&amp;quot;: &amp;quot;file2.pdf&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;size&amp;quot;: 3017536,&lt;br /&gt;
  &amp;quot;digest&amp;quot;: &amp;quot;630d01a329c70aedb66ae7118d12ff7dc6fe06223d1c27b793e1bacc0ca84dd469ec1a6050184f8d9c35a0636546b0e2e5be08d9b51285e53eb1c9f959fef59d&amp;quot;,&lt;br /&gt;
  &amp;quot;algorithm&amp;quot;: &amp;quot;sha512&amp;quot;,&lt;br /&gt;
  &amp;quot;filename&amp;quot;: &amp;quot;file1.pdf&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;size&amp;quot;: 3420686,&lt;br /&gt;
  &amp;quot;digest&amp;quot;: &amp;quot;931eb84f798dc9add1a10c7bbd4cc85fe08efda26cac473411638d1f856865524a517209d4c7184d838ee542c8ebc9909dc64ef60f8653a681270ce23524e8e4&amp;quot;,&lt;br /&gt;
  &amp;quot;algorithm&amp;quot;: &amp;quot;sha512&amp;quot;,&lt;br /&gt;
  &amp;quot;filename&amp;quot;: &amp;quot;file3.pdf&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
The simplest usecase for tooltool is to provide a manifest and the url of a tooltool server (this url is not longer used, the last modified file is from 13-Oct-2015) , and run a &amp;quot;fetch&amp;quot; command to download the files mentioned in the manifest:&lt;br /&gt;
&lt;br /&gt;
  python  tooltool.py fetch -m my-manifest.tt&lt;br /&gt;
&lt;br /&gt;
If a manifest name is not provided, tooltool will default to manifest.tt.&lt;br /&gt;
&lt;br /&gt;
Tooltool is build on https://mozilla-releng.net/tooltool/ and to find the uploaded file you can search after : Filename,SHA512 hash,Upload author or Upload message (including bug number).&lt;br /&gt;
&lt;br /&gt;
example: search after &amp;quot;mitmproxy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tooltool download servers are simply apache server folders with a flat structure (all files are stored at root level with no subfolders).&lt;br /&gt;
&lt;br /&gt;
There are global options and command arguments.  All terminal interactions after the option parser finishes is done through the Python logging API.  The default is to print logging.INFO and higher messages.  Currently, the following global options exist:&lt;br /&gt;
&lt;br /&gt;
    -q/--quiet tells Tooltool to print only logging.ERROR and higher messages&lt;br /&gt;
    -v/--verbose specifies to print logging.INFO and higher&lt;br /&gt;
    -m/--manifest &amp;lt;file&amp;gt; instructs Tooltool to reference a manifest file located at the specified path&lt;br /&gt;
    -d/--algorithm &amp;lt;algorithm&amp;gt; instructs Tooltool to use the specified algorithm&lt;br /&gt;
    -o/--overwrite tells Tooltool to overwrite a local file if the filename matches the manifest but the hash value is different to the manifest&lt;br /&gt;
    --url specifies the base url to be used for remote operations&lt;br /&gt;
&lt;br /&gt;
= Where&#039;s tooltool code? =&lt;br /&gt;
&lt;br /&gt;
Tooltool&#039;s main dev repo is [https://github.com/mozilla/build-tooltool https://github.com/mozilla/build-tooltool].&lt;br /&gt;
&lt;br /&gt;
The version of tooltool which is actually deployed in our infrastructure is in https://github.com/mozilla/build-puppet/blob/master/modules/packages/templates/tooltool.py. The tooltool.py file in the puppet repo should be in sync with the main dev repo (they should be identical, apart from the she-bang line).&lt;br /&gt;
&lt;br /&gt;
= Listing and Validating =&lt;br /&gt;
&lt;br /&gt;
The two most basic commands list a manifest and validate the local files against the manifest.  The list command lists out all of the files in the manifest as well as whether they are present and/or valid.  The return code from listing is zero unless there was an error in listing the files.  Absent or invalid files will still result in an exit code of zero if there was no error in the listing process.  The validate command is used to check if all the files in the manifest are present and valid.  The exit code for validating is zero if all files in the manifest are present and their hash matches the manifest.  It is non-zero if any file is missing locally or the file does not have the same hash as the manifest.&lt;br /&gt;
&lt;br /&gt;
= How To Upload To Tooltool  =&lt;br /&gt;
&lt;br /&gt;
{{note|Make sure you&#039;re using the latest tooltool.py from https://github.com/mozilla/build-tooltool}}&lt;br /&gt;
&lt;br /&gt;
First, plan out your upload.  Are all of the files you need to upload public?  If not, tooltool also offers storage of &amp;quot;internal&amp;quot; files, which are not made publicly available but can be downloaded by those with proper permissions.  Internal files might be under a non-redistribution license (e.g., Google SDKs, Microsoft DLLs), but &#039;&#039;&#039;must not include secrets&#039;&#039;&#039; such as passwords or private keys.&lt;br /&gt;
&lt;br /&gt;
Use the `tooltool.py` client to build a manifest containing the files you would like to upload, annotating each file with its visibility level:&lt;br /&gt;
&lt;br /&gt;
    python tooltool.py add --visibility public gcc.tar.gz&lt;br /&gt;
&lt;br /&gt;
Next, you will need credentials for the upload.  Tooltool is hosted on RelengAPI, so the credentials take the form of a RelengAPI token.  To get such a token, go to https://mozilla-releng.net/tokens, log in, click on &amp;quot;Tokens&amp;quot;, and issue a user token with the permissions &#039;&#039;tooltool.upload.internal&#039;&#039; and/or &#039;&#039;tooltool.upload.public&#039;&#039;, depending on the nature of your upload.  If you don&#039;t have internal permission, then the option won&#039;t be available to you.  When you click &amp;quot;Issue&amp;quot;, you&#039;ll get a long string which you should copy/paste into a (protected) file on your system, and pass to tooltool.py with &#039;&#039;--authentication-file&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Once all of that is in place, you&#039;re ready to perform the upload.  Just like for a Git or Mercurial commit, you&#039;ll need to provide a message to indicate why you&#039;re making this upload.  Including a bug reference is always helpful.Also make sure the &amp;quot;file&amp;quot; is in the same repository from where you run tooltool.&lt;br /&gt;
&lt;br /&gt;
    python tooltool.py upload --authentication-file=~/.tooltool-token --message &amp;quot;Bug 1234567: add new frobnicator binaries&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tool will begin uploading and, when it&#039;s finished, may wait a minute or two longer until the files are verified by RelengAPI.  If your upload fails for some reason, just restart it.  Any files already completely uploaded will not need to be uploaded again.&lt;br /&gt;
&lt;br /&gt;
You can view the available files and uploads at https://mozilla-releng.net/tooltool.&lt;br /&gt;
&lt;br /&gt;
= Other tooltool features =&lt;br /&gt;
&lt;br /&gt;
== The tooltool cache ==&lt;br /&gt;
 &lt;br /&gt;
This has been implemented in bug [https://bugzilla.mozilla.org/show_bug.cgi?id=858635 https://bugzilla.mozilla.org/show_bug.cgi?id=858635]&lt;br /&gt;
All the bellow examples are used for the older packages that are on &amp;quot;http://tooltool.pub.build.mozilla.org/temp-sm-stuff&amp;quot; url.&lt;br /&gt;
When connecting to a tooltool server to fetch a file, it is now possible to use a local cache specifying the local cache folder with the -c option, e.g.:&lt;br /&gt;
&lt;br /&gt;
  python  tooltool.py fetch --url http://tooltool.pub.build.mozilla.org/temp-sm-stuff -c ~/cache&lt;br /&gt;
&lt;br /&gt;
In the previous example, folder ~/cache will be inspected for artifacts before connecting to the specified tooltool server. If the specified cache folder does not exist, tooltool will create it (if the user running tooltool has permissions to do so!).&lt;br /&gt;
Purging the cache with the purge command&lt;br /&gt;
&lt;br /&gt;
A mechanism to purge the tooltool cache has been implemented as a separate command. Let&#039;s see some examples of purge commands:&lt;br /&gt;
&lt;br /&gt;
  python  tooltool.py purge -c ~/cache&lt;br /&gt;
  python  tooltool.py purge -c ~/cache -s 34&lt;br /&gt;
  python  tooltool.py purge -c ~/cache --size 34&lt;br /&gt;
&lt;br /&gt;
In the first example, we are cleaning up the tooltool cache completely, i.e.: all the content will be wiped out&lt;br /&gt;
&lt;br /&gt;
In the second and third example the extra parameter -s (or, in extended form, --size) is provided, which specifies the number of Gigs we want to be free at the end of the purging process. Tooltool will delete files in the cache folder, starting with the oldest ones, until the specified amount of gigs is free on disk. When there is more free space that the specified gigs when the command is invokes, no files will be deleted at all.&lt;br /&gt;
&lt;br /&gt;
=== Enabling automated tooltool cache purge within purge_build.py ===&lt;br /&gt;
&lt;br /&gt;
Since the purge_builds.py script (within the build-tools repo) is already responsible of clean-up operations, the option of cleaning the tooltool cache has been added to that script as well.&lt;br /&gt;
&lt;br /&gt;
In order for the automated cleanup to take place, two environment variables need to be setup when purge_builds.py is invoked, and namely:&lt;br /&gt;
&lt;br /&gt;
  TOOLTOOL_HOME: the folder containing tooltool.py&lt;br /&gt;
  TOOLTOOL_CACHE: the local folder being used as tooltool cache (which will be cleaned up)&lt;br /&gt;
&lt;br /&gt;
= How Tooltool is invoked in build/test jobs =&lt;br /&gt;
&lt;br /&gt;
Two wrapper scripts exist which are usually being used to invoke tooltool in build/test jobs:&lt;br /&gt;
* tooltool_wrapper.sh: http://hg.mozilla.org/build/tools/file/327616201e98/scripts/tooltool/tooltool_wrapper.sh&lt;br /&gt;
* TooltoolMixin class for mozharness calls: https://hg.mozilla.org/mozilla-central/file/default/testing/mozharness/mozharness/mozilla/tooltool.py (despite being an Homonym of tooltool itself, this is a python module defining TooltoolMixin class to be used in mozharness calls).&lt;br /&gt;
&lt;br /&gt;
= Tooltool uploads: the old school =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;This is the old-school, deprecated, manual way to upload artifacts to tooltool. Please use the official procedure described above whenever possible, in order to keep information about what is uploaded, by whom, and why (the manual procedure doesn&#039;t allow to store any metadata about uploads).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to upload from your own laptop (because, eg, you have a slow uplink) you can do this from cruncher.&lt;br /&gt;
&lt;br /&gt;
Access cruncher with your credentials:&lt;br /&gt;
 ME=&amp;quot;your_short_ldap_username&amp;quot; # or `whoami`&lt;br /&gt;
 ssh -A $ME@cruncher.build.mozilla.org&lt;br /&gt;
Download the file and then:&lt;br /&gt;
 scp filename.tar.xz $ME@relengwebadm.private.scl3.mozilla.com:&lt;br /&gt;
Login to relengwebadmn:&lt;br /&gt;
 ssh $ME@relengwebadm.private.scl3.mozilla.com&lt;br /&gt;
And deploy the file to tooltool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FILE=~/emulator.zip # or whatever you&#039;re uploading&lt;br /&gt;
export SHA512=`openssl sha512 $FILE | cut -d&#039; &#039; -f2`&lt;br /&gt;
sudo mv -i $FILE /mnt/netapp/relengweb/tooltool/pvt/build/sha512/${SHA512}&lt;br /&gt;
sudo chmod 644  /mnt/netapp/relengweb/tooltool/pvt/build/sha512/${SHA512}&lt;br /&gt;
ls -l  /mnt/netapp/relengweb/tooltool/pvt/build/sha512/${SHA512}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the filename, filesize, and sha512 digest to the bug you are working on.  These can be added to the tooltool manifests later.&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=ReleaseEngineering/How_To/VCSSync&amp;diff=1196481</id>
		<title>ReleaseEngineering/How To/VCSSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=ReleaseEngineering/How_To/VCSSync&amp;diff=1196481"/>
		<updated>2018-06-30T02:12:23Z</updated>

		<summary type="html">&lt;p&gt;Garbas: new mapper url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Release Engineering How To|VCS Sync}}&lt;br /&gt;
{{Release Engineering Deployment|VCS Sync}}&lt;br /&gt;
This is documentation on the mozharness-based vcs sync processes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;legacy&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;See [http://people.mozilla.org/~hwine/tmp/vcs2vcs/ legacy docs] for the legacy (aka &amp;quot;old&amp;quot;) process.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Quick notes =&lt;br /&gt;
&lt;br /&gt;
&amp;quot;VCS-sync&amp;quot; is a system which has evolved from it&#039;s original purpose to being the tool used whenever &amp;quot;this repository needs to be publicly visible &#039;over here&#039;&amp;quot;, perhaps with modifications, and a few exceptions on &amp;quot;publicly visible&amp;quot;. The current (2016 Q1) business needs it addresses are:&lt;br /&gt;
&lt;br /&gt;
# Support for gecko developers who prefer to work with git:&lt;br /&gt;
#* All gecko primary development and release branches are merged into a single git repository (with CVS history) in &amp;quot;gecko-dev.git&amp;quot;.&lt;br /&gt;
#* All gecko twig and misc branches are merged into a single git repository (with CVS history) in &amp;quot;gecko-projects.git&amp;quot;.&lt;br /&gt;
# Support for Mozilla development tools and processes which (for operational needs (e.g. travis-ci), or developer preference, should appear in both Mercurial and Git repositories.&lt;br /&gt;
#* These are &amp;quot;mirrors&amp;quot; from one system to the other.&lt;br /&gt;
#* One repo is always designated the RoR (Repository of Record), and is the only one where commits will &amp;quot;stick&amp;quot;.&lt;br /&gt;
#* Refer to the system configurations for each mirror to determine the RoR. (It can, and has, changed over time for some repositories.)&lt;br /&gt;
# Support for Partner facing FxOS development processes.&lt;br /&gt;
#* The URL&#039;s for these repositories can not change, as they are referenced in manifest files which comprise the delivery to Partners.&lt;br /&gt;
#* These repositories on git.mozilla.org satisfy various contractual needs with FxOS partners.&lt;br /&gt;
#* These repositories must not contain either object deletions, or non-fast-forward commits.&lt;br /&gt;
#* These repositories only contain content that was &amp;quot;delivered&amp;quot; to Partners, with branches named according to FxOS conventions.&lt;br /&gt;
#* These repositories include any &amp;quot;Mozilla Contributions&amp;quot; to FxOS, which includes code beyond gecko.git and gaia.git.&lt;br /&gt;
# Support for internal FxOS development processes.&lt;br /&gt;
#* Many Android repositories have been mirrored to git.mozilla.org for the purpose of having a known-good-repository for the build systems to clone from.&lt;br /&gt;
#* Some tests still require translation from Git &amp;amp;rarr; Mercurial format. Each such gaia.git branch is mapped to a distinct Mercurial repository.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What&#039;s running where ==&lt;br /&gt;
&lt;br /&gt;
Anything not listed below is probably running in the new system. The system pushing the production content is listed first. If the other system is listed, we&#039;re in parallel operations mode and changes should be made to both systems.&lt;br /&gt;
&lt;br /&gt;
=== Repositories needed to Build Mozilla Products ===&lt;br /&gt;
{| class=&amp;quot;fullwidth-table sortable&amp;quot; &lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Repository&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Old/New&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Web views at&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| gecko-dev.git&lt;br /&gt;
| new&lt;br /&gt;
| [https://github.com/mozilla/gecko-dev.git github], [http://git.mozilla.org/?p=integration/gecko-dev.git;a=summary Moz]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| gecko-projects.git&lt;br /&gt;
| new&lt;br /&gt;
| [https://github.com/mozilla/gecko-projects.git github], [http://git.mozilla.org/?p=integration/gecko-projects.git;a=summary Moz]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| releases/gecko.git&lt;br /&gt;
| old, new&lt;br /&gt;
| [http://git.mozilla.org/?p=releases/gecko.git;a=summary Moz]&lt;br /&gt;
| Partner facing FxOS &amp;lt;nowiki&amp;gt;[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| releases/gaia.git&lt;br /&gt;
| old, new&lt;br /&gt;
| [http://git.mozilla.org/?p=releases/gaia.git;a=summary Moz]&lt;br /&gt;
| Partner facing FxOS &amp;lt;nowiki&amp;gt;[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| releases/l10n/&amp;lt;locale&amp;gt;/{gecko,gaia}.git&lt;br /&gt;
| old, new&lt;br /&gt;
| [http://git.mozilla.org/ Moz] (browse from there)&lt;br /&gt;
| Partner facing FxOS &amp;lt;nowiki&amp;gt;[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| integration/gaia*&lt;br /&gt;
| old&lt;br /&gt;
| [http://hg.mozilla.org/integration/ Moz] (browse from there)&lt;br /&gt;
| Hg versions of gaia branches to support older tooling&lt;br /&gt;
|-&lt;br /&gt;
| b2g mirrors&lt;br /&gt;
| old&lt;br /&gt;
| [http://git.mozilla.org/ Moz] browse &amp;lt;tt&amp;gt;external&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;b2g&amp;lt;/tt&amp;gt; from there (r/o)&lt;br /&gt;
| Local copies to ensure availability during builds.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
# Partner facing repositories are configured to:&lt;br /&gt;
#* not accept non fast forward commits&lt;br /&gt;
#* not accept deletes&lt;br /&gt;
#* only contain branches related to shipping versions of FxOS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Repositories Supporting Mozilla Web Products ===&lt;br /&gt;
{| class=&amp;quot;fullwidth-table sortable&amp;quot; &lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Repository&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Old/New&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Web views at&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| bugzilla-{bugzilla,qa}.git&lt;br /&gt;
| old&lt;br /&gt;
| [http://git.mozilla.org/ Moz] (r/w), [https://github.com/bugzilla/ github] (r/o)&lt;br /&gt;
| Only the bugzilla.git &amp;amp; qa.git repos are mirrored to github&lt;br /&gt;
|-&lt;br /&gt;
| webtools-bmo-{bugzilla,qa}.git&lt;br /&gt;
| old&lt;br /&gt;
| [http://git.mozilla.org/ Moz] (r/w), [https://github.com/mozilla/ webtools-bmo-* on github] (r/o)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Repositories Supporting Infrastructure, Tooling, and Miscellaneous ===&lt;br /&gt;
See also [[ReleaseEngineering/Repositories|full list of RelEng repositories]].&lt;br /&gt;
{| class=&amp;quot;fullwidth-table sortable&amp;quot; &lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Repository&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Old/New&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Web views at&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| build-releng-api.git&lt;br /&gt;
| old&lt;br /&gt;
| [http://github.com/mozilla/build-releng-api.git github] (r/o), [http://hg.mozilla.org/build/releng-api Moz] (r/o)&lt;br /&gt;
|-&lt;br /&gt;
| automation/fuzz-tools.git&lt;br /&gt;
| old&lt;br /&gt;
| [http://git.mozilla.org/?p=automation/fuzz-tools.git Moz] (r/w), [https://github.com/mozilla/automation-fuzz-tools.git github] (r/o)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| qa/mozmill-tests&lt;br /&gt;
| old&lt;br /&gt;
| [http://hg.mozilla.org/qa/mozmill-tests Moz] (r/w), [https://github.com/mozilla/qa-mozmill-tests github] (r/o)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Machines ==&lt;br /&gt;
2013.10.14: We&#039;re currently using the following machines:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;fullwidth-table sortable&amp;quot; &lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Machine&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Process&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;Location&#039;&#039;&#039;&lt;br /&gt;
| style=&amp;quot;background:#cccccc&amp;quot; | &#039;&#039;&#039;User&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| vcssync1.srv.releng.usw2.mozilla.com&lt;br /&gt;
| beagle (gecko-dev)&lt;br /&gt;
| /opt/vcs2vcs&lt;br /&gt;
| vcs2vcs&lt;br /&gt;
|-&lt;br /&gt;
| vcssync2.srv.releng.usw2.mozilla.com&lt;br /&gt;
| project-branches (gecko-projects)&lt;br /&gt;
| /opt/vcs2vcs&lt;br /&gt;
| vcs2vcs&lt;br /&gt;
|-&lt;br /&gt;
| github-sync2.dmz.scl3.mozilla.com&lt;br /&gt;
| build repos (autoland, buildapi, buildbot-configs, buildbotcustom, cloud-tools, mozharness, opsi-package-sources, partner-repacks, preproduction, puppet, puppet-manifests, rpm-sources, talos, tools)&lt;br /&gt;
| /opt/vcs2vcs&lt;br /&gt;
| vcs2vcs&lt;br /&gt;
|-&lt;br /&gt;
| github-sync4.dmz.scl3.mozilla.com&lt;br /&gt;
| gecko l10n and gaia l10n&lt;br /&gt;
| /opt/vcs2vcs&lt;br /&gt;
| vcs2vcs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Plus a [http://people.mozilla.org/~hwine/tmp/vcs2vcs/trouble_shooting.html#accessing-the-machines few other github-sync machines] for legacy processes.&lt;br /&gt;
&lt;br /&gt;
== Branch ==&lt;br /&gt;
2013.10.14: We&#039;re based off the [http://hg.mozilla.org/build/mozharness mozharness production branch].&lt;br /&gt;
&lt;br /&gt;
= Specific instructions =&lt;br /&gt;
&lt;br /&gt;
== Emails ==&lt;br /&gt;
&lt;br /&gt;
=== Successful noop emails ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
From: vcs2vcs@vcssync2.srv.releng.usw2.mozilla.com&lt;br /&gt;
Subject: [vcs2vcs] Successful conversion for project-branches (12s) &amp;lt;EOM&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are pretty much there to tell you that the job&#039;s running, everything&#039;s fine, and the noop time was (in this case) 12 seconds.  The &amp;lt;b&amp;gt;&amp;lt;EOM&amp;gt;&amp;lt;/b&amp;gt; tells you that the body of the email is empty (end of message).&lt;br /&gt;
&lt;br /&gt;
The noop time varies depending on hg.m.o load, as well as log upload times.&lt;br /&gt;
&lt;br /&gt;
See [https://wiki.mozilla.org/ReleaseEngineering/VCSSync/HowTo#How_to_adjust_email_notifications here] for enabling/disabling these... they can be pretty spammy.&lt;br /&gt;
&lt;br /&gt;
=== Successful emails with messages ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
From: vcs2vcs@vcssync1.srv.releng.usw2.mozilla.com&lt;br /&gt;
Subject: [vcs2vcs] Successful conversion for beagle (72s)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Summary is non-zero:&lt;br /&gt;
&lt;br /&gt;
info - Successfully pushed mozilla-aurora.&lt;br /&gt;
error - Error getting changes for mozilla-inbound; skipping!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
02:16:08    ERROR -  abort: HTTP Error 500: Internal Server Error&lt;br /&gt;
02:16:08    ERROR -  Automation Error: hg not responding&lt;br /&gt;
02:16:08    ERROR - Return code: 65280&lt;br /&gt;
02:16:08    ERROR - Error getting changes for mozilla-inbound; skipping!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whenever the summary of a job is non-zero, or the error log is non-zero, we&#039;ll get a message body in the success email.  This is usually a successful push notification, but can include the contents of the error log or any other information we put in the summary.  (At some future point we may add l10n repo creation on git.m.o in here).&lt;br /&gt;
&lt;br /&gt;
In this case, the ISE from hg.m.o is an intermittent issue.  In general, the script should auto-fix by clobbering+recloning, and the conversion will happen later, though it&#039;ll be delayed by this action.&lt;br /&gt;
&lt;br /&gt;
=== Failure emails ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
From: vcs2vcs@vcssync-dev.build.mozilla.com&lt;br /&gt;
Subject: [vcs2vcs] Failed conversion for beagle&lt;br /&gt;
&lt;br /&gt;
Unable to push these repos:&lt;br /&gt;
mozilla-beta: Can&#039;t push /opt/vcs2vcs/build/conversion/beagle to /opt/vcs2vcs/build/target/beagle/.git!&lt;br /&gt;
This was a test push that failed; not proceeding any further with mozilla-beta!&lt;br /&gt;
&lt;br /&gt;
Summary is non-zero:&lt;br /&gt;
&lt;br /&gt;
error - Unable to push mozilla-beta. failed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14:32:30    ERROR -  remote: error: denying non-fast-forward refs/heads/GECKO90_2011121217_RELBRANCH (you should pull first)&lt;br /&gt;
14:32:30    ERROR -   ! [remote rejected] GECKO90_2011121217_RELBRANCH -&amp;gt; GECKO90_2011121217_RELBRANCH (non-fast-forward)&lt;br /&gt;
14:32:30    ERROR -  error: failed to push some refs to &#039;/opt/vcs2vcs/build/target/beagle/.git&#039;&lt;br /&gt;
14:32:30    ERROR - Return code: 256&lt;br /&gt;
14:32:30    ERROR - mozilla-beta: Can&#039;t push /opt/vcs2vcs/build/conversion/beagle to /opt/vcs2vcs/build/target/beagle/.git!&lt;br /&gt;
14:32:30    ERROR - This was a test push that failed; not proceeding any further with mozilla-beta!&lt;br /&gt;
14:32:30    ERROR - Unable to push mozilla-beta. failed.&lt;br /&gt;
14:32:30    FATAL - Unable to push these repos:&lt;br /&gt;
14:32:30    FATAL - mozilla-beta: Can&#039;t push /opt/vcs2vcs/build/conversion/beagle to /opt/vcs2vcs/build/target/beagle/.git!&lt;br /&gt;
14:32:30    FATAL - This was a test push that failed; not proceeding any further with mozilla-beta!&lt;br /&gt;
14:32:30    FATAL - &lt;br /&gt;
14:32:30    FATAL - Running post_fatal callback...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a failure email involving [https://wiki.mozilla.org/ReleaseEngineering/VCSSync/HowTo#How_to_deal_with_GECKO90_2011121217_RELBRANCH this issue].  Luckily, we have a fix for that one already.&lt;br /&gt;
&lt;br /&gt;
Failure emails will be sent for every failure currently, so will be very spammy until they&#039;re fixed.&lt;br /&gt;
&lt;br /&gt;
== Maintenance ==&lt;br /&gt;
=== How to add a repo to gecko-git ===&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;CAUTION:&#039;&#039;&#039; production gecko.git is still handled by legacy vcs-sync - see [http://people.mozilla.org/~hwine/tmp/vcs2vcs/cookbook.html#adding-a-branch-to-gecko-git legacy docs].&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
This shouldn&#039;t be done lightly.  Gecko.git is our partner-oriented repo and should be treated with kid gloves.  &lt;br /&gt;
=== How to add another repo to mirror for b2g OS ===&lt;br /&gt;
Mirroring repositories for purpose of b2g os builds is handled by the legacy docs. See [http://people.mozilla.org/~hwine/tmp/vcs2vcs/cookbook.html#mirroring-a-git-repository here].&lt;br /&gt;
=== How to add a repo to gecko-dev ===&lt;br /&gt;
gecko-dev is our developer focused repository with all gecko branches related to release-trains and inbound-branches only.&lt;br /&gt;
&lt;br /&gt;
You should follow the example [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/beagle.py#l96 here].  Annotated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;repo&amp;quot;: &amp;quot;https://hg.mozilla.org/releases/mozilla-beta&amp;quot;,  # where we should pull the repo from.&lt;br /&gt;
&amp;quot;revision&amp;quot;: &amp;quot;default&amp;quot;,                                   # what revision to pull&lt;br /&gt;
&amp;quot;repo_name&amp;quot;: &amp;quot;mozilla-beta&amp;quot;,                             # the name we&#039;ll know this repo by.  This should be unique within this job.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;targets&amp;quot;: [{                                            &lt;br /&gt;
    &amp;quot;target_dest&amp;quot;: &amp;quot;beagle/.git&amp;quot;,                        # This is a location on disk (test_push is True)&lt;br /&gt;
    &amp;quot;vcs&amp;quot;: &amp;quot;git&amp;quot;,                                        # This was used for non-fastforward detection; might be overkill at this point.&lt;br /&gt;
    &amp;quot;test_push&amp;quot;: True,&lt;br /&gt;
}, {&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;target_dest&amp;quot;: &amp;quot;gitmo-beagle&amp;quot;,                       # This is a location specified in the remote targets&lt;br /&gt;
                                                         # http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/beagle.py#l332&lt;br /&gt;
}, {&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;target_dest&amp;quot;: &amp;quot;github-beagle&amp;quot;,                      # Also in remote_targets&lt;br /&gt;
}],&lt;br /&gt;
&lt;br /&gt;
&amp;quot;vcs&amp;quot;: &amp;quot;hg&amp;quot;,                                             # The &amp;quot;vcs&amp;quot; settings are kind of glossed over at the moment,&lt;br /&gt;
                                                         # but when we get git&amp;lt;-&amp;gt;git and git-&amp;gt;hg going it&#039;ll matter.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;branch_config&amp;quot;: {&lt;br /&gt;
    &amp;quot;branches&amp;quot;: {&lt;br /&gt;
        &amp;quot;default&amp;quot;: &amp;quot;beta&amp;quot;,                               # the &#039;default&#039; hg branch should become a &#039;beta&#039; git branch.&lt;br /&gt;
                                                         # This is really needed by the all-in-one repos where there are multiple&lt;br /&gt;
                                                         # &#039;default&#039; branches from hg that need to each be their own unique branch.&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;branch_regexes&amp;quot;: [&lt;br /&gt;
        &amp;quot;^GECKO[0-9_]*RELBRANCH$&amp;quot;,                       # Whitelist the gecko and mobile release branches without having to&lt;br /&gt;
        &amp;quot;^MOBILE[0-9_]*RELBRANCH$&amp;quot;,                      # list them all by name.&lt;br /&gt;
    ],&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;tag_config&amp;quot;: {&lt;br /&gt;
    &amp;quot;tag_regexes&amp;quot;: [&lt;br /&gt;
        &amp;quot;^(B2G|RELEASE_BASE)_&amp;quot;,                          # Whitelist the B2G and RELEASE_BASE tags.&lt;br /&gt;
                                                         # Explicitly avoid the release tags since they currently move in hg-land.&lt;br /&gt;
    ],&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to add a project to project-branch conversion ===&lt;br /&gt;
If the project is under hg.m.o/projects, add it [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/project-branches.py#l5 here].&lt;br /&gt;
&lt;br /&gt;
If the project isn&#039;t under hg.m.o/projects, add it [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/project-branches.py#l32 here].&lt;br /&gt;
&lt;br /&gt;
=== How to add a project cloning to a custom github account/project ===&lt;br /&gt;
&lt;br /&gt;
* Key setup&lt;br /&gt;
** Generate an ssh key for pushing to the github project (no passphrase)&lt;br /&gt;
** Add the key to github/org-name/project-name as a deploy key&lt;br /&gt;
** Add the key to the vcs2vcs account on the vcssync server&lt;br /&gt;
* Add the project to mapper for hg to git hash mapping&lt;br /&gt;
** Get a token from https://mozilla-releng.net/tokens &lt;br /&gt;
** POST to /project-name on https://mapper.mozilla-releng.net&lt;br /&gt;
* Filesystem setup on the vcssync server&lt;br /&gt;
** Clone the source hg repo to /opt/vcs2vcs/vcs_sync_build/build/stage_source/&lt;br /&gt;
** Clone the hg repo from stage_source to conversion &amp;lt;pre&amp;gt;hg clone /opt/vcs2vcs/vcs_sync_build/build/stage_source/$PROJECT /opt/vcs2vcs/vcs_sync_build/build/conversion/$PROJECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add to a vcs-sync configuration file. For example: https://hg.mozilla.org/build/mozharness/rev/57a550a9e307863ab125f1cd1c381de974caf79d&lt;br /&gt;
** Set the source location&lt;br /&gt;
** Set the destination org/project&lt;br /&gt;
* Monitor results and fix/tweak&lt;br /&gt;
** Join and watch the error emails in https://groups.google.com/a/mozilla.com/forum/?hl=en&amp;amp;pli=1*!forum/releng-ops-trial&lt;br /&gt;
** Check the github project for the commits to appear&lt;br /&gt;
** Compare the github commits with the hg commits&lt;br /&gt;
&lt;br /&gt;
=== How to add a locale to l10n conversion ===&lt;br /&gt;
&lt;br /&gt;
L10n conversions are based on [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/l10n.py#l82 this config file].&lt;br /&gt;
&lt;br /&gt;
These point at gecko all-locales and gaia languages_dev.json files.  To add a locale, update the appropriate all-locales or languages_dev.json file.&lt;br /&gt;
&lt;br /&gt;
If the b2g versions are changing against gecko trains (as they will every 6 weeks), you need to update [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/l10n.py#l6 this section].&lt;br /&gt;
&lt;br /&gt;
=== How to adjust email notifications ===&lt;br /&gt;
&lt;br /&gt;
The notify_config&#039;s are in each config file, like [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/beagle.py#l375 this].&lt;br /&gt;
&lt;br /&gt;
This is a list-of-dictionaries.  Each dictionary has a &amp;quot;to&amp;quot; email address.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;failure_only&amp;lt;/code&amp;gt; is set to True, no emails with a successful outcome will be sent to this address.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;skip_empty_messages&amp;lt;/code&amp;gt; is set to True, no emails without a message body will be sent (these should only be successful noop runs with no warnings).&lt;br /&gt;
&lt;br /&gt;
Allowing both of these to be False will result in a lot of email, approximately one per minute per process.  Just setting &amp;lt;code&amp;gt;skip_empty_messages&amp;lt;/code&amp;gt; to True will send email per successful push, any sort of warning, or failures.&lt;br /&gt;
&lt;br /&gt;
=== How to force the process to pull/bookmark/convert/push a repo, even if nothing&#039;s changed ===&lt;br /&gt;
&lt;br /&gt;
There is a &amp;lt;code&amp;gt;--no-check-incoming&amp;lt;/code&amp;gt; commandline option to the vcs_sync.py script.&lt;br /&gt;
&lt;br /&gt;
This can also be set in the config file, as &amp;lt;code&amp;gt;check_incoming&amp;lt;/code&amp;gt; set to True.&lt;br /&gt;
&lt;br /&gt;
This can also be set in the config file per-repository, as &amp;lt;code&amp;gt;check_incoming&amp;lt;/code&amp;gt; inside each of the specific &amp;lt;code&amp;gt;conversion_repos&amp;lt;/code&amp;gt; where we want to skip the incoming check.&lt;br /&gt;
&lt;br /&gt;
To force a push manually:&lt;br /&gt;
* cd into project-branches jobs top level directory&lt;br /&gt;
* wait for projects.lock to disappear (from cron job)&lt;br /&gt;
* touch projects.lock # grab lock to avoid race with automation&lt;br /&gt;
** or: &amp;lt;code&amp;gt;touch my_user_name.lock; while ! ln my_user_name.lock projects.lock ; do sleep 10 ; done&amp;lt;/code&amp;gt;&lt;br /&gt;
** wait for return of command prompt&lt;br /&gt;
* get the command line from the run_*.sh file: grep python run_*.sh&lt;br /&gt;
* add the &#039;--no-check-incoming&#039; option to the command&lt;br /&gt;
* wait for processing to complete&lt;br /&gt;
** &#039;&#039;&#039;NOTE&#039;&#039;&#039;: the log output is only to your screen. The usual summary, &amp;quot;&amp;lt;code&amp;gt;projects.log&amp;lt;/code&amp;gt;&amp;quot; is only updated via the &amp;lt;code&amp;gt;run_*&amp;lt;/code&amp;gt; script. ({{bug|1279008|see also}})&lt;br /&gt;
*** The official logs from the last run are in the &amp;quot;&amp;lt;code&amp;gt;./logs/&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
*** Older logs are in the &amp;quot;&amp;lt;code&amp;gt;./build/upload/logs/&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* rm &#039;projects.lock&#039; # let normal processing resume&lt;br /&gt;
&lt;br /&gt;
=== Where to find the keys ===&lt;br /&gt;
&lt;br /&gt;
The keys are the same as the keys on vcs2vcs@gd{0..4}, and has been shared on Google Drive to various RelEngers... except the passphrase has been stripped from them: &amp;lt;code&amp;gt;ssh-keygen -p -f FILE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to move a VCS Sync process ===&lt;br /&gt;
&lt;br /&gt;
* pause the cron job&lt;br /&gt;
* move the work dir (or rsync, if across machines).&lt;br /&gt;
** You need to move build/conversion or you&#039;ll start from scratch, which is definitely a no-no for mozilla-central based repos (see https://wiki.mozilla.org/ReleaseEngineering/VCSSync/HowTo#How_to_start_a_mozilla-central_based_repo_conversion_from_scratch)&lt;br /&gt;
** Moving build/stage_source will save a lot of cloning time, especially for processes with a lot of large repos like the project-branches process.&lt;br /&gt;
** If the path changes, you need to delete (or not move) build/venv.&lt;br /&gt;
** If you&#039;re trying to move it cleanly, don&#039;t move build/target or build/upload.  If you want to preserve the old history, move them.&lt;br /&gt;
* If you&#039;re on a new machine, you need to make sure it&#039;s set up properly.  (Should be easier once it&#039;s puppetized)&lt;br /&gt;
* make sure the cron job script is pointing at the right location&lt;br /&gt;
* restart the cron job&lt;br /&gt;
&lt;br /&gt;
=== How to start a mozilla-central based repo conversion from scratch ===&lt;br /&gt;
&lt;br /&gt;
* First, you need a copy of initial3.tar.bz2.  This is mozilla-central-with-cvs-history, already converted to git for you, up to Spring, 2013.  Without this file, you will need to run the [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/scripts/vcs-sync/initial_beagle.py initial conversion] with [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/gecko-git.py this config file] (or beagle) and let it run for about a week.&lt;br /&gt;
** The sha512 sum is &amp;lt;code&amp;gt;0a3243fe5a6c8ffa4e47131e0eb0243e1f5676ea3cacd535d11b424f8f601511130a2e941670950b63c0b00726dafa9bd30bf7c3d040752fce824158021ef014&amp;lt;/code&amp;gt;&lt;br /&gt;
** This file exists on vcssync{1,2} at /opt/vcs2vcs/initial3.tar.bz2 , on github-sync{2,4} at /home/asasaki/initial3.tar.bz2 , and on Aki&#039;s laptop.&lt;br /&gt;
* Second, you need a config file for the conversion type.  This is probably covered with the beagle, gecko-git, and project-branches config files [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync here].&lt;br /&gt;
* Clone the appropriate mozharness repo + branch (see [https://wiki.mozilla.org/ReleaseEngineering/VCSSync/HowTo#Branch here], unless you&#039;re working off a separate development branch).  This will go into the base_work_dir.  For instance, if you want to use &amp;lt;code&amp;gt;/opt/vcs2vcs&amp;lt;/code&amp;gt; as the base_work_dir, this will be &amp;lt;code&amp;gt;/opt/vcs2vcs/mozharness&amp;lt;/code&amp;gt; .&lt;br /&gt;
* Extract the contents of initial3.tar.bz2 into the appropriate location.  For instance, if I want to use /opt/vcs2vcs/ as my base_work_dir, and I&#039;m using [http://hg.mozilla.org/build/mozharness/file/7d9425c91051/configs/vcs_sync/gecko-git.py#l21 this config file] (which specifies &amp;quot;gecko-git&amp;quot; as my conversion_dir), I&#039;ll need to move some files around.&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /opt/vcs2vcs&lt;br /&gt;
tar xjvf initial3.tar.bz2  # this creates conversion/beagle&lt;br /&gt;
mkdir -p build/conversion&lt;br /&gt;
# move the extracted directory from initial3.tar.bz2 to where&lt;br /&gt;
# the mozharness script expects the gecko-git conversion dir to be&lt;br /&gt;
mv conversion/beagle build/conversion/gecko-git&lt;br /&gt;
rmdir conversion&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Run the conversion once if you want to make sure.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/vcs2vcs&lt;br /&gt;
# For example,&lt;br /&gt;
python mozharness/scripts/vcs-sync/vcs_sync.py -c mozharness/configs/vcs-sync/CONFIGFILE.py  # [--no-push] [--no-upload] [--no-notify] if desired&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** If you want to avoid certain actions, you can specify that you want to skip them.  &amp;lt;code&amp;gt;--no-push&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--no-upload&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;--no-notify&amp;lt;/code&amp;gt; might be some options you want to use, depending on the situation.  &amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--list-actions&amp;lt;/code&amp;gt; should be helpful as well.&lt;br /&gt;
* Run in cron like the other boxen.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
=== How to deal with non-ffwd ===&lt;br /&gt;
&lt;br /&gt;
# Determine what happened.  This can generally be found with &amp;lt;pre&amp;gt;hg heads&amp;lt;/pre&amp;gt;.  If there are multiple heads for a branch, you&#039;ll need to follow the below instructions.&lt;br /&gt;
# Determine if you want to discard one of the heads, or merge them.  (Do you want the changes from both heads, or do you want one head&#039;s changes to stick and discard the other one?)&lt;br /&gt;
#* If you want to merge the two heads, you can do so with &amp;lt;code&amp;gt;hg merge&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hg commit&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;hg push&amp;lt;/code&amp;gt;&lt;br /&gt;
#* If we want to discard one,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# we&#039;re on good revision X&lt;br /&gt;
# we have old [bad] revision Y, which is a different head &lt;br /&gt;
hg debugsetparents X Y; hg commit -m &amp;quot;merging X and Y via debugsetparents&amp;quot; # Create a new changeset that has parents X and Y&lt;br /&gt;
hg glog | more # see that the history has merged&lt;br /&gt;
hg diff -r X # see that the code is the same as revision X, no diffs&lt;br /&gt;
hg push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you hit a relbranch issue you may need to follow [https://wiki.mozilla.org/ReleaseEngineering/VCSSync/HowTo#How_to_deal_with_GECKO90_2011121217_RELBRANCH these instructions] instead.&lt;br /&gt;
&lt;br /&gt;
=== How to deal with project branch reset ===&lt;br /&gt;
&lt;br /&gt;
To some degree, the integration-gecko-projects repo should be self-healing.  If the incoming changesets to a repo are incompatible (so an &amp;lt;code&amp;gt;hg pull&amp;lt;/code&amp;gt; doesn&#039;t work), the script should blow away the source repo and reclone.  The integration-gecko-projects target will shortly have &amp;lt;code&amp;gt;force_push&amp;lt;/code&amp;gt; set to True, so it should be pushing with &amp;lt;code&amp;gt;git push -f&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, project branch resets may become an issue; time will tell.&lt;br /&gt;
&lt;br /&gt;
We can probably:&lt;br /&gt;
&lt;br /&gt;
* pause the project branches job (vcs2vcs@vcssync2 cron),&lt;br /&gt;
* delete the branch on github https://github.com/mozilla/integration-gecko-projects/branches&lt;br /&gt;
* delete the branch on disk (vcs2vcs@vcssync2:/opt/vcs2vcs/build/stage_source/BRANCH)&lt;br /&gt;
* restart the job&lt;br /&gt;
&lt;br /&gt;
and it&#039;ll clone a new copy of the branch, convert, and push.&lt;br /&gt;
&lt;br /&gt;
If there are still issues, we can debug further to try to get it to work.  A final nuke-the-site-from-orbit solution is documented [https://wiki.mozilla.org/ReleaseEngineering/VCSSync/HowTo#How_to_deal_with_completely_resetting_gecko-projects here], but may take the repo down for a day or so.&lt;br /&gt;
&lt;br /&gt;
=== How to deal with completely resetting gecko-projects ===&lt;br /&gt;
&lt;br /&gt;
# Make the decision that this is the solution to the problem.&lt;br /&gt;
# Make sure people are aware this is going to happen.&lt;br /&gt;
# Stop the conversion of gecko-projects.  This is currently on vcs2vcs@vcssync2, and is run via cron.&lt;br /&gt;
# Save a copy of https://raw.github.com/mozilla/integration-gecko-projects/master/README.md&lt;br /&gt;
# Delete the repo!  This option is available in the &amp;quot;Danger Zone&amp;quot; area of https://github.com/mozilla/integration-gecko-projects/settings&lt;br /&gt;
# Recreate the repo.  There&#039;s a &amp;quot;Create a new repo&amp;quot; icon in the top right.  This will need the same name, should be public, and you want to initialize the repo with a README.  (gecko-projects is the only repo where we want the README: essentially, we want an empty master branch because github doesn&#039;t allow you to delete the first populated branch in a repo.)&lt;br /&gt;
# Edit the README with the contents you downloaded in step 4.&lt;br /&gt;
# Start the conversion back up.  You may only need to delete the build/target and build/stage_source/BAD_REPO directories.  Or you may need to blow away the whole thing from orbit to be sure, in which case you should follow the docs for [https://wiki.mozilla.org/ReleaseEngineering/VCSSync/HowTo#How_to_start_a_mozilla-central_based_repo_conversion_from_scratch how to start a mozilla-central based repo conversion from scratch].&lt;br /&gt;
#* Note, just cloning the hg repos for the projects repo can take many many hours, so this will take the gecko-projects repo down for a long time.&lt;br /&gt;
&lt;br /&gt;
=== How to deal with GECKO90_2011121217_RELBRANCH ===&lt;br /&gt;
&lt;br /&gt;
We were getting email with the following failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
11:14:01    ERROR -  remote: error: denying non-fast-forward refs/heads/GECKO90_2011121217_RELBRANCH (you should pull first)&lt;br /&gt;
11:14:01    ERROR -   ! [remote rejected] GECKO90_2011121217_RELBRANCH -&amp;gt; GECKO90_2011121217_RELBRANCH (non-fast-forward)&lt;br /&gt;
11:14:01    ERROR -  error: failed to push some refs to &#039;/opt/vcs2vcs/build/target/beagle/.git&#039;&lt;br /&gt;
11:14:02    ERROR - Return code: 256&lt;br /&gt;
11:14:02    ERROR - mozilla-beta: Can&#039;t push /opt/vcs2vcs/build/conversion/beagle to /opt/vcs2vcs/build/target/beagle/.git!&lt;br /&gt;
11:14:02    ERROR - This was a test push that failed; not proceeding any further with mozilla-beta!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To debug:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# vcs2vcs@vcssync1&lt;br /&gt;
cd /opt/vcs2vcs/build/target/beagle&lt;br /&gt;
git show GECKO90_2011121217_RELBRANCH  # this gave 1003ec79451969335008880ad82e305d93b89642&lt;br /&gt;
cd /opt/vcs2vcs/build/conversion/beagle&lt;br /&gt;
git show GECKO90_2011121217_RELBRANCH  # this gave fac7279c040d643fb4c35105fa85b9335ba2c2f9&lt;br /&gt;
git merge-base fac7279c040d643fb4c35105fa85b9335ba2c2f9 1003ec79451969335008880ad82e305d93b89642&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The merge-base returned &amp;lt;code&amp;gt;fac7279c040d643fb4c35105fa85b9335ba2c2f9&amp;lt;/code&amp;gt;.  That means that &amp;lt;code&amp;gt;fac727&amp;lt;/code&amp;gt; is a parent to &amp;lt;code&amp;gt;1003ec&amp;lt;/code&amp;gt;.  No sha divergence, only stale history.&lt;br /&gt;
&lt;br /&gt;
I noticed that http://hg.mozilla.org/releases/mozilla-beta/rev/GECKO90_2011121217_RELBRANCH pointed at &amp;lt;code&amp;gt;a9221b332d8a&amp;lt;/code&amp;gt; (dec 15) and http://hg.mozilla.org/releases/mozilla-release/rev/GECKO90_2011121217_RELBRANCH pointed at &amp;lt;code&amp;gt;4e309e63c279&amp;lt;/code&amp;gt; (jan 3); Calendar must have done a release off the relbranch off mozilla-release.  Since the branch name is shared across mozilla-beta and mozilla-release, converting the branch from mozilla-beta effectively does a non-fastforward push and is rejected.&lt;br /&gt;
&lt;br /&gt;
To fix, I exported the two revisions from mozilla-release to mozilla-beta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd mozilla-release&lt;br /&gt;
hg export -r 79350 &amp;gt; ../cal2&lt;br /&gt;
hg export -r 79349 &amp;gt; ../cal1&lt;br /&gt;
# Doublecheck to make sure those look good&lt;br /&gt;
cd ../mozilla-beta&lt;br /&gt;
hg pull -u&lt;br /&gt;
hg up -r GECKO90_2011121217_RELBRANCH&lt;br /&gt;
hg import ../cal1&lt;br /&gt;
hg ident  # sha matched m-r&lt;br /&gt;
hg import ../cal2&lt;br /&gt;
hg ident  # sha matched m-r&lt;br /&gt;
hg out&lt;br /&gt;
hg push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then update https://wiki.mozilla.org/ReleaseEngineering/VCSSync/History#Relbranch_issues .&lt;br /&gt;
&lt;br /&gt;
==== Hints ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hg glog 0..REVISION&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Ondemand_Update_Tests&amp;diff=1196480</id>
		<title>QA/Ondemand Update Tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Ondemand_Update_Tests&amp;diff=1196480"/>
		<updated>2018-06-30T02:01:45Z</updated>

		<summary type="html">&lt;p&gt;Garbas: new treestatus url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Summary =&lt;br /&gt;
This page describes in detail the steps you need to take to run Ondemand Update tests for various Firefox builds. The setup below assumes you have access to [http://mm-ci-production.qa.scl3.mozilla.com:8080 Jenkins], either from within the internal network or via [https://mana.mozilla.org/wiki/pages/viewpage.action?pageId=30769829 VPN]. &lt;br /&gt;
&lt;br /&gt;
Complementary to update tests on the &#039;&#039;&#039;&amp;quot;release&amp;quot;&#039;&#039;&#039; channel, you may need to also run [https://wiki.mozilla.org/QA/Throttling_Tests Throttling Tests]. Visit the link for instructions on how to run these.&lt;br /&gt;
&lt;br /&gt;
= Setting up the config file = &lt;br /&gt;
# &amp;lt;big&amp;gt;&amp;lt;font style=&amp;quot;background: yellow; font-weight:bold;&amp;quot;&amp;gt;Configuration data should be readily available prior to builds coming out&amp;lt;/font&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
# &amp;lt;big&amp;gt;&#039;&#039;&#039;Steps to find/update configuration data, and set up the config file:&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
## Search Mozilla wiki for the Test Plan page for the version you are testing - e.g. if you need to test update for 52.0.2, then go to the Firefox 52 Test Plan page - https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan&lt;br /&gt;
## Look for the section dedicated to the exact version that you need to test&lt;br /&gt;
### E.g. if you need to test update for 52.0.2, it should be under &#039;&#039;&#039;Milestones -&amp;gt; Release Candidates -&amp;gt; 52.0.2&#039;&#039;&#039; (see https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#52.0.2)&lt;br /&gt;
### E.g. if you need to test update for Beta 6, it should be under &#039;&#039;&#039;Milestone -&amp;gt; Betas -&amp;gt; Beta 6&#039;&#039;&#039; (see https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#Beta_6)&lt;br /&gt;
## &amp;lt;big&amp;gt;&#039;&#039;&#039;If there is a section dedicated to the exact version that you need to test&#039;&#039;&#039;&amp;lt;/big&amp;gt;, do the following:&lt;br /&gt;
### Under &#039;&#039;&#039;&amp;quot;Testing&amp;quot;-&amp;gt;&amp;quot;Automated&amp;quot;&#039;&#039;&#039; there should be a link that says &#039;&#039;&#039;“configs”&#039;&#039;&#039; - click on it&lt;br /&gt;
### The Config page that opens (e.g. https://wiki.mozilla.org/QA/Desktop_Firefox/Releases/Configs/Fx52b6), will display information on update restrictions and watersheds, and below you should see the contents needed in the config files to run the tests - usually there will be two sections: one for the Win 64 builds config file (the short one on the bottom), and a larger one for all the other platforms&lt;br /&gt;
### Copy each section of pre-formatted text (starting with [testrun]) in a &#039;&#039;&#039;“config.ini”&#039;&#039;&#039; file on your computer - you can name the files any way you want but it&#039;s recommended you give it a name that will help you keep track of it (e.g. &#039;&#039;&#039;&amp;quot;52b6_build1_beta-cdntest_win64.ini&amp;quot;&#039;&#039;&#039; for a config file used to test 52 Beta 6 build 1, with a 64 bit Windows build, on the beta-cdntest channel)&lt;br /&gt;
### Make sure that the &amp;lt;font style=&amp;quot;background: yellow; font-weight:bold;&amp;quot;&amp;gt;“channel”&amp;lt;/font&amp;gt; value is the one that you want to test - notice how the order to test the channels is specified in each corresponding test plan: &lt;br /&gt;
#### Beta - https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#Beta_6 -&amp;gt; Testing -&amp;gt; Automated = order is: “beta-cdntest”, then “beta”&lt;br /&gt;
#### Release Candidate - https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#52.0_RC2 -&amp;gt; Testing -&amp;gt; Automated = order is: “beta-cdntest”, then &amp;quot;beta&amp;quot;, then “release-cdntest”, then “release”&lt;br /&gt;
#### Dot Release - https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#52.0.2 -&amp;gt; Testing -&amp;gt; Automated = order is: “release-localtest”, then “release-cdntest”, then “release”&lt;br /&gt;
#### ESR - https://wiki.mozilla.org/Releases/Firefox_52_ESR/Test_Plan#Firefox_52.1.0_ESR -&amp;gt; Checklist = order is: “esr-localtest”, then “esr-cdntest”, then “esr”&lt;br /&gt;
### Save the files locally - they are now ready to be used to run the tests&lt;br /&gt;
## &amp;lt;big&amp;gt;&#039;&#039;&#039;If there is NO section dedicated to the exact version that you need to test&#039;&#039;&#039;&amp;lt;/big&amp;gt;, do the following:&lt;br /&gt;
### Look for the section dedicated to the previous build: e.g. if you are testing 52 Beta 6, look for the 52 Beta 5 section in the Test Plan (https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#Beta_5)&lt;br /&gt;
### Under the &#039;&#039;&#039;&amp;quot;Testing&amp;quot;-&amp;gt;&amp;quot;Automated&amp;quot;&#039;&#039;&#039; section there should be a link that says &#039;&#039;&#039;“configs”&#039;&#039;&#039; - click on it&lt;br /&gt;
### The Config page that opens (e.g. https://wiki.mozilla.org/QA/Desktop_Firefox/Releases/Configs/Fx52b5), will display information on update restrictions and watersheds, and below you should see the contents needed in the config files to run the tests - usually there will be two sections: one for the Win 64 builds config file (the short one on the bottom), and a larger one for all the other platforms&lt;br /&gt;
### Copy each section of pre-formatted text (starting with [testrun]) in a &#039;&#039;&#039;“config.ini”&#039;&#039;&#039; file on your computer - you can name the files any way you want but it&#039;s recommended you give it a name that will help you keep track of it (e.g. &#039;&#039;&#039;&amp;quot;52b6_build1_beta-cdntest_win64.ini&amp;quot;&#039;&#039;&#039; for a config file used to test 52 Beta 6 build 1, with a 64 bit Windows build, on the beta-cdntest channel)&lt;br /&gt;
### Open each config file for editing&lt;br /&gt;
### Modify the &amp;lt;font style=&amp;quot;background: yellow; font-weight:bold;&amp;quot;&amp;gt;“target-version”&amp;lt;/font&amp;gt; value to the version corresponding to the build you are testing, making sure the correct format is used (see examples below):&lt;br /&gt;
#### Beta - 52.0b6#1 - means 52 Beta 6, build 1 (found here: https://archive.mozilla.org/pub/firefox/candidates/52.0b6-candidates/)&lt;br /&gt;
#### Release/Dot release - 52.0.1#2 - means 52.0.1, build 2 (found here: https://archive.mozilla.org/pub/firefox/candidates/52.0.1-candidates/)&lt;br /&gt;
#### ESR - 52.1.0esr#3 - means ESR 52.1.0, build 3 (found here: https://archive.mozilla.org/pub/firefox/candidates/52.1.0esr-candidates/) &lt;br /&gt;
### &amp;lt;big&amp;gt;&amp;lt;font style=&amp;quot;background: yellow; font-weight:bold;&amp;quot;&amp;gt;Make sure to always use the latest available build, as that&#039;s the one Firefox should be updating to&amp;lt;/font&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
### Modify the &amp;lt;font style=&amp;quot;background: yellow; font-weight:bold;&amp;quot;&amp;gt;“channel”&amp;lt;/font&amp;gt; value to the channel that you want to test (notice how the order to test the channels is specified in each corresponding test plan: &lt;br /&gt;
#### Beta - https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#Beta_6 -&amp;gt; Testing -&amp;gt; Automated = order is: “beta-cdntest”, then “beta”&lt;br /&gt;
#### Release Candidate - https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#52.0_RC2 -&amp;gt; Testing -&amp;gt; Automated = order is: “beta-cdntest”, then &amp;quot;beta&amp;quot;, then “release-cdntest”, then “release”&lt;br /&gt;
#### Dot Release - https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan#52.0.2 -&amp;gt; Testing -&amp;gt; Automated = order is: “release-localtest”, then “release-cdntest”, then “release”&lt;br /&gt;
#### ESR - https://wiki.mozilla.org/Releases/Firefox_52_ESR/Test_Plan#Firefox_52.1.0_ESR -&amp;gt; Checklist = order is: “esr-localtest”, then “esr-cdntest”, then “esr”&lt;br /&gt;
### Modify the config files:&lt;br /&gt;
#### At a minimum make sure that the previous version is updated (e.g. you&#039;ll notice that on each platform we test the previous version with en-US and/or another locale - in https://wiki.mozilla.org/QA/Desktop_Firefox/Releases/Configs/Fx52b5 you&#039;ll see that the previous version - 52.0b4 - is the first one to be covered for each platform - if you are updating the file to be used for 52 Beta 6, then, at a minimum, you need to change 52.0b4 everywhere to 52.0b5)&lt;br /&gt;
#### For a complete update of the config data, we aim at covering for each version:&lt;br /&gt;
##### all builds of version V, with one locale each - e.g. for https://wiki.mozilla.org/QA/Desktop_Firefox/Releases/Configs/Fx52b5, under [windows xp 32bit], there is one locale for each of 52.0b4, 52.0b3, 52.0b2, 52.0b1 (with en-US for 52.0.b4) - if we cannot cover all builds of version V under a platform, then we aim at splitting them as evenly as possible among various similar platforms (Windows, Mac, Linux)&lt;br /&gt;
##### a minimum of one locale for V-1, V-2, V-3 versions - e.g. for https://wiki.mozilla.org/QA/Desktop_Firefox/Releases/Configs/Fx52b5, we cover a random version of each of 51b, 50b, and 49b for Windows, but because we afford it, we cover multiple versions for 51b on Linux&lt;br /&gt;
#### &amp;lt;big&amp;gt;&amp;lt;font style=&amp;quot;background: yellow; font-weight:bold;&amp;quot;&amp;gt;NOTE: The configuration data is designed to cover ALL existing locales exactly once on any platform (except for en-US), distribute the tests as evenly as possible between Windows, Mac and Linux, cover versions only up to V-3 (except for ESR), and focus more on the more recent previous versions, and less on the older previous versions&amp;lt;/font&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
### Once you&#039;ve modified the data in your config files, save the files locally (they&#039;re now ready to use to run the tests), then also create a new Wiki page for the new config data, using the wiki page from the previous config (e.g. for 52 Beta 6, go to https://wiki.mozilla.org/QA/Desktop_Firefox/Releases/Configs/Fx52b6 to create it, and add the info from https://wiki.mozilla.org/QA/Desktop_Firefox/Releases/Configs/Fx52b5, with the modified config file content)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Example of test plans for Firefox and ESR (just replace the version number in the URL to get to the wiki you need):&lt;br /&gt;
## https://wiki.mozilla.org/Releases/Firefox_52/Test_Plan &lt;br /&gt;
## https://wiki.mozilla.org/Releases/Firefox_52_ESR/Test_Plan&lt;br /&gt;
&lt;br /&gt;
= Running the tests with the config file =&lt;br /&gt;
# Connect to MozillaVPN&lt;br /&gt;
# Go to http://mm-ci-production.qa.scl3.mozilla.com:8080/&lt;br /&gt;
# Login with valid credentials&lt;br /&gt;
# Click on the [http://mm-ci-production.qa.scl3.mozilla.com:8080/job/trigger-ondemand/ trigger-ondemand] link&lt;br /&gt;
# Click on [http://mm-ci-production.qa.scl3.mozilla.com:8080/job/trigger-ondemand/build?delay=0sec Build with Parameters] on the left side of the page&lt;br /&gt;
# Click on the &#039;&#039;&#039;“Choose File”&#039;&#039;&#039; button and select your config file for the run&lt;br /&gt;
# Click the &#039;&#039;&#039;“Build”&#039;&#039;&#039; button -&amp;gt; The job will start to load in the panel on the left&lt;br /&gt;
# As you will usually use two config files, repeat the steps above to start the tests with the second file as well (you can do it immediately, the system will know to start the jobs from the second file, once the ones in the first file are all started)&lt;br /&gt;
# Monitor progress in: http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/&lt;br /&gt;
# Monitor test results in Treeherder:&lt;br /&gt;
## &amp;lt;big&amp;gt;&#039;&#039;&#039;If the Test Plan section already exists for your version&#039;&#039;&#039;&amp;lt;/big&amp;gt; - Click on the &#039;&#039;&#039;&amp;quot;report&amp;quot;&#039;&#039;&#039; link corresponding to the channel that you are testing&lt;br /&gt;
## &amp;lt;big&amp;gt;&#039;&#039;&#039;If the Test Plan section doesn&#039;t/didn&#039;t already exist for your version&#039;&#039;&#039;&amp;lt;/big&amp;gt; - Follow the next steps:&lt;br /&gt;
### Open the report for the previous version (see examples below):&lt;br /&gt;
#### Beta/Release/Dot Release - https://wiki.mozilla.org/Releases/Firefox_46/Test_Plan#Beta_4 &#039;&#039;&#039;-&amp;gt; Testing -&amp;gt; Automated -&amp;gt; “report” link =&amp;gt;&#039;&#039;&#039; https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=2f6f69a19150&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta-cdntest( &lt;br /&gt;
#### ESR - https://wiki.mozilla.org/Releases/Firefox_45_ESR/Test_Plan#Firefox_45.0.1_ESR &#039;&#039;&#039;-&amp;gt; Checklist -&amp;gt; Update automation on esr-localtest -&amp;gt; “report” link =&amp;gt;&#039;&#039;&#039; https://treeherder.mozilla.org/#/jobs?repo=mozilla-esr45&amp;amp;revision=32eb8c423d67&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-esr-localtest(&lt;br /&gt;
### In the URL of the report for the previous version, just replace the revision string with the one for the current version (that you are testing now) - to find this value do the following:&lt;br /&gt;
#### Go to the location of your build, and select any platform and any language - e.g. for 44.0.2 you could go to: http://archive.mozilla.org/pub/firefox/candidates/44.0.2-candidates/build3/win32/en-US/ &lt;br /&gt;
#### Click on the txt file at this location to view it - e.g. in this case: http://archive.mozilla.org/pub/firefox/candidates/44.0.2-candidates/build3/win32/en-US/firefox-44.0.2.txt&lt;br /&gt;
#### Navigate to the URL in the txt file - e.g. in this case: https://hg.mozilla.org/releases/mozilla-release/rev/60e96806ff1c9fb51f3df31ccd1db33f5f320e75 &lt;br /&gt;
#### Note the text on the top page - e.g. in this case: &#039;&#039;&#039;“Mercurial &amp;gt; releases &amp;gt; mozilla-release / changeset / 60e96806ff1c”&#039;&#039;&#039;&lt;br /&gt;
#### The last string is the value to use in the URl of the report for  &#039;&#039;&#039;“revision”&#039;&#039;&#039; - e.g. in this case the value will be &#039;&#039;&#039;“60e96806ff1c”&#039;&#039;&#039;&lt;br /&gt;
### Also make sure that the &#039;&#039;&#039;“filter-searchStr”&#039;&#039;&#039; value in the URL corresponds to the channel you are testing&lt;br /&gt;
### You should now be able to see the results in real time, similar to the pic below:&lt;br /&gt;
[[File:Tree1.png]]&lt;br /&gt;
&lt;br /&gt;
= Analyzing the results =&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font style=&amp;quot;background: green; font-weight:bold;&amp;quot;&amp;gt;Green = PASS&amp;lt;/font&amp;gt; ==&lt;br /&gt;
# No action&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font style=&amp;quot;background: orange; font-weight:bold;&amp;quot;&amp;gt;Orange = TEST FAILURE&amp;lt;/font&amp;gt; ==&lt;br /&gt;
# If there’s a star displayed next to the text then it’s already starred&lt;br /&gt;
# If there is no star then you need to classify the failure:&lt;br /&gt;
## Click on the string -&amp;gt; The &#039;&#039;&#039;“Pinboard”&#039;&#039;&#039; will open&lt;br /&gt;
## See more details in section &#039;&#039;&#039;4. Classifying failures&#039;&#039;&#039; below&lt;br /&gt;
## Rebuild:&lt;br /&gt;
### In the pinboard (picture below) click on the &#039;&#039;&#039;“Job details”&#039;&#039;&#039; tab&lt;br /&gt;
### Click on the link next to &#039;&#039;&#039;“Inspect Jenkins Build (VPN required):”&#039;&#039;&#039;&lt;br /&gt;
### This will bring you to the Jenkins page for that test - e.g. http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/23245/&lt;br /&gt;
### On this Jenkins page click the &#039;&#039;&#039;“Rebuild”&#039;&#039;&#039; link on the left of the page&lt;br /&gt;
### Now click the &#039;&#039;&#039;“Rebuild”&#039;&#039;&#039; button on the bottom of the page&lt;br /&gt;
### Several seconds after the test was rebuilt you should see a new entry on the Treeherder [https://treeherder.mozilla.org/#/jobs?repo=mozilla-esr45&amp;amp;revision=32eb8c423d67&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-esr-localtest report] page with the same name as the one that failed (e.g. “lij-1”) but in gray (meaning it’s running) - if the rebuild passes you will then see it in green and are all done&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font style=&amp;quot;background: red; font-weight:bold;&amp;quot;&amp;gt;Red = BUSTAGE&amp;lt;/font&amp;gt; ==&lt;br /&gt;
# The exact same actions apply as for Orange&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font style=&amp;quot;background: pink; font-weight:bold;&amp;quot;&amp;gt;Pink = CANCELLED&amp;lt;/font&amp;gt; ==&lt;br /&gt;
# Possible causes:&lt;br /&gt;
## Manual cancellation - [https://treeherder.mozilla.org/#/jobs?repo=mozilla-release&amp;amp;revision=078baf501b55&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-release&amp;amp;selectedJob=190668 Example]&lt;br /&gt;
### HOW - you can manually cancel jobs in Jenkins by clicking the &#039;&#039;&#039;&amp;quot;x&amp;quot;&#039;&#039;&#039; icon next to a job in http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/, or clicking on the link for a job and then clicking the &#039;&#039;&#039;&amp;quot;x&amp;quot;&#039;&#039;&#039; icon on top right of the page&lt;br /&gt;
### ACTIONS - just classify all pink jobs as &#039;&#039;&#039;&amp;quot;expected fail&amp;quot;&#039;&#039;&#039; with a comment as to why you&#039;ve cancelled them, and then either rebuild all pink jobs (if just a few) or re-trigger the whole ondemand job using the config.ini file&lt;br /&gt;
## Network issues - [https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=2991f214d4f4&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta&amp;amp;selectedJob=1074174 Example]&lt;br /&gt;
### HOW - network issues may cause the test machines to not be able to setup the environment, so tests won&#039;t even be start&lt;br /&gt;
### ACTIONS - just classify all pink jobs as &#039;&#039;&#039;&amp;quot;infra&amp;quot;&#039;&#039;&#039; with a comment stating that they were caused by an internal network issue, and then either rebuild all pink jobs (if just a few) or re-trigger the whole ondemand job using the config.ini file&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Classifying failures&#039;&#039;&#039; ==&lt;br /&gt;
# &#039;&#039;&#039;Issue is in the &amp;quot;Failure Summary&amp;quot;/&amp;quot;Failure Classification&amp;quot; list&#039;&#039;&#039;&lt;br /&gt;
## Look for all errors for that test - in the picture below there is only one error: &#039;&#039;&#039;“TEST-UNEXPECTED-FAIL | test_fallback_update.py TestFallbackUpdate.test_update | AssertionError: The staged update to buildid 20170504103226 has not been applied”&#039;&#039;&#039; - which shows on the first line under &#039;&#039;&#039;&amp;quot;Failure Classification&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;&amp;quot;Failure Summary&#039;&#039;&#039;&amp;quot; if you select it&lt;br /&gt;
## Look underneath the error for the bug number that best corresponds to your error - in the picture below that would be: &#039;&#039;&#039;“1355818 - [tier-3] Intermittent test_fallback_update.py TestFallbackUpdate.test_update | AssertionError: The staged update to buildid 20170412030252 has not been applied”&#039;&#039;&#039; - which is the very first line under the error (most of the times, the first line will also be the bug that you&#039;re looking for)&lt;br /&gt;
## Click the pin icon in front of the bug number (&#039;&#039;&#039;Note: you need to be logged in&#039;&#039;&#039;)&lt;br /&gt;
## Click save - you should get a notification on the top left of the page that the error has been classified, and the job will now display a &#039;&#039;&#039;star&#039;&#039;&#039; on the top right [[File:ondemand_fail_1.png]]&lt;br /&gt;
## &#039;&#039;&#039;Note: this also works if you have multiple jobs selected with Ctrl+click (if all have failed with the same error)&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Issue is NOT in the Failure Summary&#039;&#039;&#039;&lt;br /&gt;
## Search this wiki or bugzilla for the error (search Product=Testing, Component=Firefox UI Tests - [https://bugzilla.mozilla.org/buglist.cgi?list_id=13011155&amp;amp;short_desc=Unable%20to%20locate%20window%3A&amp;amp;query_format=advanced&amp;amp;short_desc_type=allwordssubstr&amp;amp;component=Firefox%20UI%20Tests&amp;amp;product=Testing example of query])&lt;br /&gt;
### If found:&lt;br /&gt;
#### Ctrl+Click on the failed job OR click on &#039;&#039;&#039;“Open pinboard ^”&#039;&#039;&#039; (additionally you can Ctrl+Click on all jobs that failed with the same error)&lt;br /&gt;
#### Under “classification” select &#039;&#039;&#039;“intermittent”&#039;&#039;&#039;&lt;br /&gt;
#### Add the bug number in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field, and press ENTER - if this doesn&#039;t work, add it in the comment field&lt;br /&gt;
#### Click &#039;&#039;&#039;“save”&#039;&#039;&#039; (if &#039;&#039;&#039;“save”&#039;&#039;&#039; button is disabled, CTRL+Click the same test again - you should see it added on the left, and &#039;&#039;&#039;“save”&#039;&#039;&#039; is enabled) - classify the issue as &amp;quot;intermittent&amp;quot; with the bug number&lt;br /&gt;
### If not found file a new bug:&lt;br /&gt;
#### Via Treeherder (the quick way to do it)&lt;br /&gt;
##### In the URL bar add &#039;&#039;&#039;&amp;quot;&amp;amp;bugfiler&amp;quot;&#039;&#039;&#039; parameter to the URL and press &#039;&#039;&#039;&amp;quot;Enter&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
##### Click on the job that failed&lt;br /&gt;
##### Select the &#039;&#039;&#039;Failure Summary&#039;&#039;&#039; tab (the second one, in between &#039;&#039;&#039;Job Details&#039;&#039;&#039; and &#039;&#039;&#039;Failure Classification&#039;&#039;&#039;)&lt;br /&gt;
##### Click the small &#039;&#039;&#039;bug icon&#039;&#039;&#039; in front of the failure that you want to file (the line that says: &amp;quot;TEST-UNEXPECTED-ERROR | ...&amp;quot;) -&amp;gt; This should open the &#039;&#039;&#039;Intermittent Bug Filer&#039;&#039;&#039; pop-up window&lt;br /&gt;
##### In the Product entry field add &#039;&#039;&#039;Testing :: Firefox UI Tests&#039;&#039;&#039; and click &#039;&#039;&#039;&amp;quot;Find Product&amp;quot;&#039;&#039;&#039; -&amp;gt; Make sure the component is found, and the radio box in front of it appears as selected&lt;br /&gt;
##### Double-check the summary to make sure it is the desired one&lt;br /&gt;
##### Leave all three check-boxes selected:&lt;br /&gt;
###### &#039;&#039;&#039;Include Parsed Log Link&#039;&#039;&#039;&lt;br /&gt;
###### &#039;&#039;&#039;Include Full Log Link&#039;&#039;&#039;&lt;br /&gt;
###### &#039;&#039;&#039;This is an intermittent failure&#039;&#039;&#039; (unless you are hitting a permanent failure, in which case you need to uncheck it)&lt;br /&gt;
##### Add any additional comments, as you consider necessary (e.g. where it was found, how many times it was seen, etc.)&lt;br /&gt;
##### Click &#039;&#039;&#039;&amp;quot;Submit Bug&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
##### The failure should now appear as classified, and within several seconds you should also see the link to the newly filed bug&lt;br /&gt;
#### Via Bugzilla&lt;br /&gt;
##### Choose to create a [https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&amp;amp;component=Firefox%20UI%20Tests new bug] for Testing::Firefox UI &lt;br /&gt;
##### Set &#039;&#039;&#039;&amp;quot;Version&amp;quot;=&amp;lt;version_that_you&#039;ve_run_the_tests_for&#039;&#039;&#039;&lt;br /&gt;
##### Set appropriate &#039;&#039;&#039;&amp;quot;Platform&amp;quot;&#039;&#039;&#039; values (or leave &#039;&#039;&#039;Unspecified&#039;&#039;&#039;)&lt;br /&gt;
##### In the &#039;&#039;&#039;&amp;quot;Summary&amp;quot;&#039;&#039;&#039; field enter the error encountered (the error that shows in [https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=5bbf2e7c2fc6&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta(&amp;amp;selectedJob=1025489 Treeherder] under &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039; - e.g. &#039;&#039;&#039;&amp;quot;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update, test_fallback_update.py TestFallbackUpdate.test_update, test_page_info_window.py TestPageInfoWindow.test_close_window | MarionetteException: win.document.documentElement is null&amp;quot;&#039;&#039;&#039;)&lt;br /&gt;
##### In the &#039;&#039;&#039;&amp;quot;Description&amp;quot;&#039;&#039;&#039; field add the following information:&lt;br /&gt;
###### Where was the error seen (with link to the [https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=5bbf2e7c2fc6&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta(&amp;amp;selectedJob=1025489 Treeherder] job) - for [https://bugzilla.mozilla.org/show_bug.cgi?id=1268087 example]: &amp;quot;Seen once while running ondemand update tests for 47.0b1 (https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=5bbf2e7c2fc6&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta(&amp;amp;selectedJob=1025489).&amp;quot;&lt;br /&gt;
###### Traceback log - to get this do the following:&lt;br /&gt;
####### For the [https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=5bbf2e7c2fc6&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta(&amp;amp;selectedJob=1025489 Treeherder job] that failed, click on the &#039;&#039;&#039;&amp;quot;Job details&amp;quot;&#039;&#039;&#039; tab&lt;br /&gt;
####### Click the &#039;&#039;&#039;&amp;quot;report.html&amp;quot;&#039;&#039;&#039; link, to open the report in a new tab&lt;br /&gt;
####### Copy the contents displayed under the &#039;&#039;&#039;&amp;quot;Results&amp;quot;&#039;&#039;&#039; section (e.g. &amp;quot;Traceback (most recent call last): ...&amp;quot;&lt;br /&gt;
####### This will be your Traceback log to paste in the bug description - see the example [https://bugzilla.mozilla.org/show_bug.cgi?id=1268087 here]&lt;br /&gt;
# &#039;&#039;&#039;No logs available in the &amp;quot;Failure Summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## This usually indicates a problem with the Mozilla infrastructure&lt;br /&gt;
## Actions to take:&lt;br /&gt;
### If [http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/ Jenkins] indicates only a few failure&lt;br /&gt;
#### Rebuild and see if it passes (if it doesn&#039;t then it may be a real problem)&lt;br /&gt;
#### Once rebuilt and passed classify the issue as &amp;quot;infra&amp;quot; (comment is not mandatory)&lt;br /&gt;
### If [http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/ Jenkins] indicates a lot of failures&lt;br /&gt;
#### Reverify the config file&lt;br /&gt;
#### If config file is OK, contact :whimboo on #automation - he should know/investigate such issues&lt;br /&gt;
#### Once notified that the problem was remedied:&lt;br /&gt;
##### Classify all failures in treeherder as &amp;quot;infra&amp;quot; (comment is not mandatory)&lt;br /&gt;
##### Start the entire run once again (could rebuild individual jobs that failed, but that takes a much longer time)&lt;br /&gt;
##### Examples: [https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=2991f214d4f4&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta&amp;amp;selectedJob=1074194 47 Beta 4]&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Common issues&#039;&#039;&#039; ==&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;Logs not fully parsed, please wait&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is an infrastructure issue - no need to wait as the logs won&#039;t be parsed&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Open pinboard (or Ctrl+Click on the job), in the &#039;&#039;&#039;classification&#039;&#039;&#039; drop-down select &#039;&#039;&#039;infra&#039;&#039;&#039;, then click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-FAIL | test_direct_update.py TestDirectUpdate.test_update | AssertionError: Available update has been found&amp;lt;/font&amp;gt;&lt;br /&gt;
## This usually indicates that Firefox has &#039;&#039;&#039;NOT&#039;&#039;&#039; found any updates available&lt;br /&gt;
## Actions:&lt;br /&gt;
### Check the results for patterns showing that only some versions get this, and double check for existing watersheds (there may be an existing watershed or rule in place that does not allow update of specific versions - #releng can check for this)&lt;br /&gt;
#### If a watershed is in place then all tests for the same version should fail in the exact same way - if you only have a few failures then this is likely [https://bugzil.la/1316567 bug 1316567] - Actions to take in case of bug:&lt;br /&gt;
##### [[#Rebuilding|Re-build]] - If tests pass on rebuild, then this confirms you are dealing with [https://bugzil.la/1316567 bug 1316567]&lt;br /&gt;
##### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
###### Click the pin icon in front of [https://bugzil.la/1316567 bug 1316567] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
###### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
#### &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;If ALL tests fail, and most failures are with this error message and the one below&amp;lt;/font&amp;gt;, then it means that the server is not properly configured - Actions to take:&lt;br /&gt;
##### Notify people on #release-drivers or #releng about this, and ask them to check the server settings&lt;br /&gt;
#####&#039;&#039;&#039;Classify the error&#039;&#039;&#039; as &amp;quot;expected fail&amp;quot; with a comment explaining that this is due to the server not being set properly:&lt;br /&gt;
###### Ctrl+Click all failures, in the classification drop-down select &amp;quot;expected fail&amp;quot;, in the field below add a comment explaining that this is due to the server not being set properly, press ENTER, and then Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
##### After the rules on the update the server are fixed, re-run all jobs (trigger aggain with the same config files)&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-FAIL | test_direct_update.py TestDirectUpdate.test_update | AssertionError: u&#039;20160427030215&#039; != u&#039;20160425205003&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
## This usually indicates that Firefox was updated to a different version than the expected one&lt;br /&gt;
### The first string is the &#039;&#039;&#039;BuildID&#039;&#039;&#039; of the &#039;&#039;&#039;ACTUAL&#039;&#039;&#039; version that Firefox got updated to&lt;br /&gt;
### The second string is the &#039;&#039;&#039;BuildID&#039;&#039;&#039; of the &#039;&#039;&#039;EXPECTED&#039;&#039;&#039; version that Firefox was supposed to get updated to&lt;br /&gt;
## Actions:&lt;br /&gt;
### Check the results for patterns showing that only some versions get this, and double check for existing watersheds (there may be an existing watershed or rule in place that does not allow update directly to your expected version, but instead force update to an intermediate version - #releng can check for this)&lt;br /&gt;
#### If a watershed is in place then all tests for the same version should fail in the exact same way - if you only have 1-2 failures then this is likely [https://bugzil.la/1285340 bug 1285340] - Actions to take in case of bug:&lt;br /&gt;
##### [[#Rebuilding|Re-build]]&lt;br /&gt;
##### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
###### Click the pin icon in front of [https://bugzil.la/1285340 bug 1285340] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
###### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
#### &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;If ALL tests fail, and most failures are with this error message and the one above&amp;lt;/font&amp;gt;, then it means that the server is not properly configured - Actions to take:&lt;br /&gt;
##### Notify people on #release-drivers or #releng about this, and ask them to check the server settings&lt;br /&gt;
#####&#039;&#039;&#039;Classify the error&#039;&#039;&#039; as &amp;quot;expected fail&amp;quot; with a comment explaining that this is due to the server not being set properly:&lt;br /&gt;
###### Ctrl+Click all failures, in the classification drop-down select &amp;quot;expected fail&amp;quot;, in the field below add a comment explaining that this is due to the server not being set properly, press ENTER, and then Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
##### After the rules on the update the server are fixed, re-run all jobs (trigger aggain with the same config files)&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | AssertionError: &#039;beta-cdntest&#039; != u&#039;nightly&#039;&amp;lt;/font&amp;gt;  &lt;br /&gt;
## This means that the machine running the test is stuck on Nightly or Aurora - &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;ISSUE USED TO BE WIDESPREAD BUT SHOULD NOW BE FIXED&amp;lt;/font&amp;gt;&lt;br /&gt;
## To confirm click the &#039;&#039;&#039;“Job details”&#039;&#039;&#039; tab then the &#039;&#039;&#039;“report.html”&#039;&#039;&#039; link - if you see screenshots showing an open Nightly/Aurora window, then it’s confirmed that the machine is stuck on Nightly or Aurora - &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;If you don&#039;t see a Nightly or Aurora build, but instead get the expected build, then just ignore the error and classify the other errors (if multiple errors), or classify as &amp;quot;infra&amp;quot; if it&#039;s the only error&amp;lt;/font&amp;gt;&lt;br /&gt;
## Actions:&lt;br /&gt;
### Make sure your VPN is connected&lt;br /&gt;
### Open a VNC Viewer app on Windows (e.g. VNC Viewer, Tight VNC Viewer)&lt;br /&gt;
### In the “VNC Server” or “Remote Host” field enter the name of the machine where the failure occurred (you can find it on the left of the expanded pinboard - e.g. &#039;&#039;&#039;&amp;quot;Machine: mm-win-7-64-2.qa.scl3.mozilla.com&amp;quot;&#039;&#039;&#039;)&lt;br /&gt;
### Enter the password to connect to the machine (if you do not know the password you can ask in #automation)&lt;br /&gt;
### You should now be connected to that machine and see an open Nightly/Aurora window&lt;br /&gt;
### Note down: name of the machine, version of Firefox that was open (e.g. from &amp;quot;about:support&amp;quot; -&amp;gt; &amp;quot;49.0a1, BuildID=20160512205003&amp;quot;), and page that was open in the active window (e.g. &amp;quot;about:home&amp;quot;)&lt;br /&gt;
#### &#039;&#039;&#039;Do this for all other machines in this case - you should now have a list of affected machines, firefox versions, and open pages&#039;&#039;&#039;&lt;br /&gt;
### Close the Firefox window and exit from the VNC Viewer app - &#039;&#039;&#039;NOTE: Make sure you close ONLY the FIREFOX windows&#039;&#039;&#039;&lt;br /&gt;
#### &#039;&#039;&#039;In case of multiple machines in this situation do the following&#039;&#039;&#039;&lt;br /&gt;
##### &#039;&#039;&#039;Close ONLY the Firefox window on all of them&#039;&#039;&#039;&lt;br /&gt;
##### &#039;&#039;&#039;Take at least one machine offline (see &amp;quot;[[#Taking_node_offline|Taking node offline]]&amp;quot; at the end of this wiki page&#039;&#039;&#039;&lt;br /&gt;
##### &#039;&#039;&#039;Send email to mozmill-ci@mozilla.org, stating that there are multiple machines stuck on Nightly/Aurora, and list the details picked in the previous steps (machine name, firefox version that was stuck, with BuildID, page that was open)&#039;&#039;&#039;&lt;br /&gt;
##### &#039;&#039;&#039;Proceed then to classify issues and rebuild&#039;&#039;&#039;&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### Classify the issue:&lt;br /&gt;
#### Click on the failed test&lt;br /&gt;
#### Click on &#039;&#039;&#039;“Open pinboard ^”&#039;&#039;&#039;&lt;br /&gt;
#### If &#039;&#039;&#039;“save”&#039;&#039;&#039; button is disabled, CTRL+Click the same test again (you should see it added on the left, and &#039;&#039;&#039;“save”&#039;&#039;&#039; is enabled)&lt;br /&gt;
#### Under “classification” select &#039;&#039;&#039;“infra”&#039;&#039;&#039;&lt;br /&gt;
#### Add a comment like: &amp;quot;Machines stuck on Nightly/Aurora&amp;quot;&lt;br /&gt;
#### Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
#### Note: you can classify multiple issues of the same kind by using CTRL+Click for multiple selection&lt;br /&gt;
## &#039;&#039;&#039;NOTE: These errors can also show in case of expected failures, caused by:&#039;&#039;&#039;&lt;br /&gt;
### &#039;&#039;&#039;Bad config.ini - For example [https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=076bf6a0ac85&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta&amp;amp;selectedJob=1012101 here] a config.ini file was used where the target build was 46.0b11, but for some locales the source for the update was also 46.0b11 - obviously a build will not update to itself&#039;&#039;&#039;&lt;br /&gt;
### &#039;&#039;&#039;Watershed rules - are rules set so that some older versions will NOT update beyond some version, for example:&#039;&#039;&#039;&lt;br /&gt;
#### &#039;&#039;&#039;44.0b1 is an update &amp;quot;watershed&amp;quot; for Windows, no updates from before go to builds beyond it. This means that if you set up a test to update 43.0b7 for example to the latest Beta version (e.g. 47.0b4), then the update test will fail, as 43.0b7 would update to 44.0b1&#039;&#039;&#039;&lt;br /&gt;
#### &#039;&#039;&#039;44.0rc3 is an update &amp;quot;watershed&amp;quot; for Linux, 44.0b4 and earlier only get updates to that version.&#039;&#039;&#039;&lt;br /&gt;
### &#039;&#039;&#039;Blocked updates - temporary/partially disabled updates - For example [https://treeherder.mozilla.org/#/jobs?repo=mozilla-release&amp;amp;revision=0b8492c110be&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-release&amp;amp;selectedJob=191052 here] a lot of tests failed because when releasing 46.0.1 to the release channel, Release Engineering decided that updates from 45.0.2 and lower should be temporarily disabled ([https://bugzil.la/1269848 bug 1269848]), which naturally caused all update tests to fail, except for the ones that tested update from 46.0&#039;&#039;&#039;&lt;br /&gt;
#### &#039;&#039;&#039;Basically in this case, the failures confirmed the fix for [https://bugzil.la/1269848 bug 1269848]&#039;&#039;&#039;&lt;br /&gt;
#### &#039;&#039;&#039;These failures were NOT rebuilt since they were never going to pass (until the change from [https://bugzil.la/1269848 bug 1269848] would have been reverted)&#039;&#039;&#039;&lt;br /&gt;
#### &#039;&#039;&#039;All these failures were marked as &amp;quot;expected fail&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | AttributeError: &#039;dict&#039; object has no attribute &#039;type&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1247596 bug 1247596]&lt;br /&gt;
## This is &#039;&#039;&#039;NOT&#039;&#039;&#039; necessarily a problem with Firefox&lt;br /&gt;
## This usually indicates there are some watersheds in play - to find out more information:&lt;br /&gt;
### Click on a job and then on &#039;&#039;&#039;&amp;quot;Job details&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
### Click on the &#039;&#039;&#039;&amp;quot;log_info.log&amp;quot;&#039;&#039;&#039; link&lt;br /&gt;
### Go through the log trying to figure out:&lt;br /&gt;
#### What might have caused a failure&lt;br /&gt;
#### What&#039;s the actual build that Firefox got updated to (look for &#039;&#039;&#039;&amp;quot;build_post&amp;quot;&#039;&#039;&#039; in the logs)&lt;br /&gt;
## Re-building jobs is unlikely to help in this case, but you can try to do it at least once&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | NoSuchWindowException: NoSuchWindowException: No window found for &#039;&amp;lt;function &amp;lt;lambda&amp;gt; at 0x03226830&amp;gt;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1274943 bug 1274943] - should show up in the &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1274943 bug 1274943] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | error: [Errno 10054] An existing connection was forcibly closed by the remote host&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1314627 bug 1314627] - should show up in the &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1314627 bug 1314627] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | IOError: process died with returncode 0&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1289343 bug 1289343] - should show up in the &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1289343 bug 1289343] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-FAIL | test_direct_update.py TestDirectUpdate.test_update | AssertionError: &amp;lt;firefox_puppeteer.ui.about_window.deck.DownloadFailedPanel object at 0x02830CD0&amp;gt; == &amp;lt;firefox_puppeteer.ui.about_window.deck.DownloadFailedPanel object at 0x02830650&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1249466 bug 1249466], which is in fact a duplicate of [https://bugzil.la/1249467 bug 1249467] - should show up in the &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1249467 bug 1249467] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-FAIL | test_direct_update.py TestDirectUpdate.test_update | AssertionError: &amp;lt;firefox_puppeteer.ui.about_window.deck.DownloadingPanel object at 0x032BD9F0&amp;gt; != &amp;lt;firefox_puppeteer.ui.about_window.deck.CheckForUpdatesPanel object at 0x032BD770&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1233679 bug 1233679]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1233679 bug 1233679] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | IOError: Timed out waiting for port!&amp;lt;/font&amp;gt; &#039;&#039;&#039;*** OR ***&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | IOError: Timed out waiting for port!&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1202375 bug 1202375] - should show up in the &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1202375 bug 1202375] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | MarionetteException: MarionetteException: win.document.documentElement is null&amp;lt;/font&amp;gt; &#039;&#039;&#039;*** OR ***&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | MarionetteException: MarionetteException: win.document.documentElement is null&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1268087 bug 1268087]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1268087 bug 1268087] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | TimeoutException: TimeoutException: Timed out after 5.1 seconds&amp;lt;/font&amp;gt; &#039;&#039;&#039;*** OR ***&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | TimeoutException: TimeoutException: Timed out after 5.1 seconds with message: Cannot get window type for chrome window handle &amp;quot;1&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1256425 bug 1256425] - should show up in the &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1256425 bug 1256425] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | JavascriptException: JavascriptException: TypeError: ums.activeUpdate is null&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1260383 bug 1260383]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1260383 bug 1260383] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | UnknownException: UnknownException: Error loading page&amp;lt;/font&amp;gt; &#039;&#039;&#039;*** OR ***&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | UnknownException: UnknownException: Error loading page&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1262122 bug 1262122]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1262122 bug 1262122] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | TimeoutException: TimeoutException: Timed out after 360.2 seconds with message: Download has been completed.&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1238002 bug 1238002] - should show up in the &#039;&#039;&#039;&amp;quot;Failure summary&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1238002 bug 1238002] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | NoSuchWindowException: NoSuchWindowException: Unable to locate window: [1|3]&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1207042 bug 1207042]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1207042 bug 1207042] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | TimeoutException: TimeoutException: Timed out after 30.2 seconds with message: Check for updates has been finished.&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1288731 bug 1288731]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1288731 bug 1288731] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | IOError: Process killed because the connection to Marionette server is lost. Check gecko.log for errors (Reason: Connection timed out after 60s)&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1311987 bug 1311987]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1311987 bug 1311987] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | IOError: Process killed because the connection to Marionette server is lost. Check gecko.log for errors (Reason: Timed out waiting for port 2828!)&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1303834 bug 1303834]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1303834 bug 1303834] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | UnknownWindowError: UnknownWindowError: Window with handle &amp;quot;1&amp;quot; does not exist&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1323174 bug 1323174]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1323174 bug 1323174] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | IOError: Process has been closed (Exit code: 0) (Reason: [Errno 61] Connection refused)&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1324059 bug 1324059]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1324059 bug 1324059] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-FAIL | test_fallback_update.py TestFallbackUpdate.test_update | AssertionError: Additional update found due to watershed release 50.1.0&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1316564 bug 1316564]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1316564 bug 1316564] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | MarionetteException: Please start a session&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1322109 bug 1322109]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1322109 bug 1322109] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | NoSuchWindowException: No window found for &#039;1&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1377092 bug 1377092]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1377092 bug 1377092] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;IOError: Process killed because the connection to Marionette server is lost. Check gecko.log for errors (Reason: Timed out waiting for connection on localhost:2828!)&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1362293 bug 1362293]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1362293 bug 1362293] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-FAIL | test_fallback_update.py TestFallbackUpdate.test_update | AssertionError: The staged update to buildid 20170504103226 has not been applied&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1355818 bug 1355818]&lt;br /&gt;
## Actions:&lt;br /&gt;
### &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;On localtest or cdntest channels ONLY&amp;lt;/font&amp;gt; - [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1355818 bug 1355818] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
## &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;NOTE: This error causes repeated failures on WINDOWS, that pass after multiple re-runs, and seriously affect the official channels (beta, release, esr), to the point where you might even end up re-building the same job up to 100 times until it passes - this error was not reported in the real world - current agreement is that WE DO NOT RE-BUILD JOBS THAT FAILED WITH THIS ERROR ON OFFICIAL CHANNELS (beta, release, esr) - we only re-build on localtest or cdntest channels&amp;lt;/font&amp;gt;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | IOError: Process killed because the connection to Marionette server is lost. Check gecko.log for errors (Reason: Timed out waiting for connection on localhost:2828!)&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1303834 bug 1303834]&lt;br /&gt;
## Actions:&lt;br /&gt;
### &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;On localtest or cdntest channels ONLY&amp;lt;/font&amp;gt; - [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1303834 bug 1303834] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
## &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;NOTE: This error causes repeated failures on LINUX, that pass after multiple re-runs, and seriously affect the official channels (beta, release, esr), to the point where you might even end up re-building the same job up to 100 times until it passes - this error was not reported in the real world - current agreement is that WE DO NOT RE-BUILD JOBS THAT FAILED WITH THIS ERROR ON OFFICIAL CHANNELS (beta, release, esr) - we only re-build on localtest or cdntest channels&amp;lt;/font&amp;gt;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_fallback_update.py TestFallbackUpdate.test_update | TimeoutException: Timed out after 5.1 seconds with message: No new chrome window has been opened.&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1372982 bug 1372982]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1372982 bug 1372982] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
# &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;TEST-UNEXPECTED-ERROR | test_direct_update.py TestDirectUpdate.test_update | JavascriptException: ReferenceError: log is not defined&amp;lt;/font&amp;gt;&lt;br /&gt;
## This is [https://bugzil.la/1383032 bug 1383032]&lt;br /&gt;
## Actions:&lt;br /&gt;
### [[#Rebuilding|Re-build]]&lt;br /&gt;
### If/after the test passes on re-build, &#039;&#039;&#039;Classify the error&#039;&#039;&#039;:&lt;br /&gt;
#### Click the pin icon in front of [https://bugzil.la/1383032 bug 1383032] + Click &#039;&#039;&#039;“save”&#039;&#039;&#039; &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;***OR***&amp;lt;/font&amp;gt;&lt;br /&gt;
#### Open pinboard (or Ctrl+Click), manually add the bug number (in the &#039;&#039;&#039;&amp;quot;+ click to add a related bug&amp;quot;&#039;&#039;&#039; field on the left of the &amp;quot;classification&amp;quot; field), press ENTER + Click &#039;&#039;&#039;“save”&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Reporting = &lt;br /&gt;
See below a series of emails sent when signing off various builds, on various channels. Note that the procedure can vary on the same channel at different phases.&lt;br /&gt;
&lt;br /&gt;
== BETA - sign off on beta-cdntest ==&lt;br /&gt;
=== BETA 1 ===&lt;br /&gt;
&#039;&#039;&#039;QA signs off, but Release Management asks for the push to &amp;quot;beta&amp;quot; channel (as the release notes need to be ready)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: release-drivers [mailto:release-drivers-bounces@mozilla.org] On Behalf Of Robert Kaiser&lt;br /&gt;
Sent: Thursday, January 28, 2016 7:21 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] QE sign-off for Firefox 45.0b1&lt;br /&gt;
&lt;br /&gt;
QE has finished testing Firefox 45.0b1 build1 candidates and updates on the beta-cdntest channel.&lt;br /&gt;
&lt;br /&gt;
Automated testing looks OK, manual testing looks good as well, the larger issues found are either not regressions or in default-off code.&lt;br /&gt;
&lt;br /&gt;
I think we&#039;re good to go live with 45.0b1. Pushing the build to beta (and DevEdition to aurora) is gated on release management&#039;s call.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== BETA 2-last ===&lt;br /&gt;
&#039;&#039;&#039;QA signs off, and asks for the push to &amp;quot;beta&amp;quot; channel (no need to wait on Release Management)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: release-drivers [mailto:release-drivers-bounces@mozilla.org] On Behalf Of Florin Mezei&lt;br /&gt;
Sent: Tuesday, May 10, 2016 5:28 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] Please push firefox and devedition 47.0b4 to beta and aurora, respectively&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Drivers,&lt;br /&gt;
 &lt;br /&gt;
QE has finished testing Firefox 47.0b4 (build1), and updates on the beta-cdntest channel. Regression and manual testing efforts found one new issue (https://bugzil.la/1271642), which is Linux specific and not a recent regression, so we consider the build ready for release to Beta.&lt;br /&gt;
 &lt;br /&gt;
Please make the build live on the beta channel - and the corresponding DevEdition build live on the aurora channel.&lt;br /&gt;
&lt;br /&gt;
For more information on testing of 47.0b4, see our test plan at&lt;br /&gt;
https://wiki.mozilla.org/Releases/Firefox_47/Test_Plan#Beta_4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BETA - sign off on beta ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: release-drivers [mailto:release-drivers-bounces@mozilla.org] On Behalf Of Michelle Funches&lt;br /&gt;
Sent: Tuesday, May 10, 2016 7:42 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] Firefox 47.0b4 - Updates on Beta Channel signed off by QA&lt;br /&gt;
&lt;br /&gt;
Drivers,&lt;br /&gt;
&lt;br /&gt;
Update tests on the beta channel look good. Results are here: https://treeherder.mozilla.org/#/jobs?repo=mozilla-beta&amp;amp;revision=2991f214d4f4&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-beta(&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RC - sign off on beta-cdntest ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: Florin Mezei [mailto:florin.mezei@softvisioninc.eu] &lt;br /&gt;
Sent: Wednesday, June 01, 2016 5:24 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] Preliminary sign-off for Firefox 47.0RC on the beta-cdntest channel&lt;br /&gt;
&lt;br /&gt;
Drivers,&lt;br /&gt;
&lt;br /&gt;
QE has finished testing the Firefox 47.0RC (build1) candidate, and updates on the beta-cdntest channel. Manual testing efforts and automated update tests found no blocking issues for pushing to beta.&lt;br /&gt;
&lt;br /&gt;
From the QE side, we are ready to make the builds live on the beta channel, so handing over to RelMan to give the &amp;quot;go&amp;quot; on that.&lt;br /&gt;
&lt;br /&gt;
For more information on testing of 47.0RC build1, see our test plan at&lt;br /&gt;
https://wiki.mozilla.org/Releases/Firefox_47/Test_Plan#47.0_RC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RC - sign off on beta ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: Florin Mezei [mailto:florin.mezei@softvisioninc.eu] &lt;br /&gt;
Sent: Wednesday, June 01, 2016 7:26 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] Firefox 47.0 RC updates on beta channel signed off by QE&lt;br /&gt;
&lt;br /&gt;
Update tests on the beta channel look good. Results are here.&lt;br /&gt;
&lt;br /&gt;
Signing off for 47.0 RC (build 1) on this channel.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RC - sign off on release-cdntest ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: release-drivers [mailto:release-drivers-bounces@mozilla.org] On Behalf Of Florin Mezei&lt;br /&gt;
Sent: Tuesday, June 07, 2016 5:09 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] Firefox 47.0 (build 3) signed off on the release-cdntest channel by QE&lt;br /&gt;
&lt;br /&gt;
Update tests on the release-cdntest channel look good. See results at: https://treeherder.mozilla.org/#/jobs?repo=mozilla-release&amp;amp;revision=b0310cb90fd0&amp;amp;group_state=expanded&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-release-cdntest(. &lt;br /&gt;
&lt;br /&gt;
Test Plan can be found at: https://wiki.mozilla.org/Releases/Firefox_47/Test_Plan#47.0_RC3 &lt;br /&gt;
&lt;br /&gt;
Pending Release Management decision, we can go forward with releasing this one.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RC - sign off on release ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: release-drivers [mailto:release-drivers-bounces@mozilla.org] On Behalf Of Florin Mezei&lt;br /&gt;
Sent: Tuesday, April 26, 2016 8:18 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] QE signing off on 46.0 release&lt;br /&gt;
&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
Update tests look good on the release channel.&lt;br /&gt;
&lt;br /&gt;
More details in the Test Plan: https://wiki.mozilla.org/Releases/Firefox_46/Test_Plan#Release_46.0. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DOT RELEASE - sign off on release-localtest ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: release-drivers [mailto:release-drivers-bounces@mozilla.org] On Behalf Of Florin Mezei&lt;br /&gt;
Sent: Tuesday, May 03, 2016 9:29 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] Firefox 46.0.1 signed off on the release-localtest channel by QE&lt;br /&gt;
&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
Update tests on the release-localtest channel look good, manual testing showed no new issues, and bug https://bugzil.la/1267318 has been verified.&lt;br /&gt;
&lt;br /&gt;
With that, I&#039;m signing off for QE on release-localtest and handing over to release management.&lt;br /&gt;
&lt;br /&gt;
For more information on testing of 46.0.1, see our test plan at:&lt;br /&gt;
https://wiki.mozilla.org/Releases/Firefox_46/Test_Plan#46.0.1_Build_1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RELEASE &amp;amp; DOT RELEASE - sign off on release-cdntest ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: release-drivers [mailto:release-drivers-bounces@mozilla.org] On Behalf Of Florin Mezei&lt;br /&gt;
Sent: Tuesday, May 03, 2016 10:32 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] Firefox 60.0.2 signed off on the release-cdntest channel by QE&lt;br /&gt;
&lt;br /&gt;
Update tests on the release-cdntest channel look good. See results at: https://public.etherpad-mozilla.org/p/Firefox_60.0.2-build1. &lt;br /&gt;
&lt;br /&gt;
Test Plan can be found at:&lt;br /&gt;
https://wiki.mozilla.org/Releases/Firefox_60/Test_Plan#60.0.2_Build_1&lt;br /&gt;
&lt;br /&gt;
Pending Release Management decision, we can go forward with releasing this one.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RELEASE &amp;amp; DOT RELEASE - sign off on release ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: Florin Mezei [mailto:florin.mezei@softvisioninc.eu] &lt;br /&gt;
Sent: Wednesday, May 04, 2016 12:15 AM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] QE signing off on 60.0.2 release&lt;br /&gt;
&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
Update tests (https://public.etherpad-mozilla.org/p/Firefox_60.0.2-build1) look good on the release channel.&lt;br /&gt;
&lt;br /&gt;
More details in the Test Plan:&lt;br /&gt;
https://wiki.mozilla.org/Releases/Firefox_60/Test_Plan#Release_60.0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ESR - sign off on esr-localtest ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: Florin Mezei [mailto:florin.mezei@softvisioninc.eu] &lt;br /&gt;
Sent: Tuesday, April 26, 2016 3:46 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] QE Signs off on Firefox 52.9.0 ESR on the &amp;quot;esr-localtest&amp;quot; channel&lt;br /&gt;
&lt;br /&gt;
Hi, &lt;br /&gt;
&lt;br /&gt;
We have completed the following manual update testing using &amp;quot;esr-localtest&amp;quot; channel for Firefox 52.9.0 ESR (build1) and found no new issues:&lt;br /&gt;
                  o Results: https://public.etherpad-mozilla.org/p/esr-52.9.0-build1 &lt;br /&gt;
                  o Test Plan: https://wiki.mozilla.org/Releases/Firefox_52_ESR/Test_Plan#Firefox_52.9.0_ESR  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ESR - sign off on esr-cdntest ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: Florin Mezei [mailto:florin.mezei@softvisioninc.eu] &lt;br /&gt;
Sent: Tuesday, April 26, 2016 4:46 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] QE Signs off on Firefox 52.9.0 ESR build1 on the &amp;quot;esr-cdntest&amp;quot; channel&lt;br /&gt;
&lt;br /&gt;
Hi, &lt;br /&gt;
&lt;br /&gt;
We have completed the following manual update testing using &amp;quot;esr-cdntest&amp;quot; channel for Firefox 52.9.0 ESR (build1) and found no new issues:&lt;br /&gt;
                  o Results: https://public.etherpad-mozilla.org/p/esr-52.9.0-build1&lt;br /&gt;
                  o Test Plan: https://wiki.mozilla.org/Releases/Firefox_52_ESR/Test_Plan#Firefox_52.9.0_ESR   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ESR - sign off on esr ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; white-space:pre-wrap; word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
From: Florin Mezei [mailto:florin.mezei@softvisioninc.eu] &lt;br /&gt;
Sent: Tuesday, April 26, 2016 7:42 PM&lt;br /&gt;
To: &#039;release-drivers&#039; &amp;lt;release-drivers@mozilla.org&amp;gt;&lt;br /&gt;
Subject: [desktop] QE Signs off on Firefox 52.9.0 ESR on the &amp;quot;esr&amp;quot; channel&lt;br /&gt;
&lt;br /&gt;
Hi, &lt;br /&gt;
&lt;br /&gt;
We have completed the following manual update testing using &amp;quot;esr&amp;quot; channel for Firefox 52.9.0 ESR (build1) and found no new issues:&lt;br /&gt;
                  o Results: https://public.etherpad-mozilla.org/p/esr-52.9.0-build1&lt;br /&gt;
                  o Test Plan: https://wiki.mozilla.org/Releases/Firefox_52_ESR/Test_Plan#Firefox_52.9.0_ESR  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
# All tests fail&lt;br /&gt;
## Usually it’s a sign of:&lt;br /&gt;
### Incorrect settings in the config file:&lt;br /&gt;
#### Action: check the config file again and make sure the correct values are set for “target-version”, and “channel”&lt;br /&gt;
### Some massive problem with Jenkins/Marionette (e.g. [https://bugzilla.mozilla.org/show_bug.cgi?id=1271661 Network issues])&lt;br /&gt;
#### Actions:&lt;br /&gt;
##### Check https://mozilla-releng.net/treestatus/ to see if &#039;&#039;&#039;mozilla-beta&#039;&#039;&#039;, &#039;&#039;&#039;mozilla-release&#039;&#039;&#039;, or &#039;&#039;&#039;mozilla-esrXX&#039;&#039;&#039; are &amp;lt;font style=&amp;quot;color: green; font-weight:bold;&amp;quot;&amp;gt;OPEN&amp;lt;/font&amp;gt; or &amp;lt;font style=&amp;quot;color: red; font-weight:bold;&amp;quot;&amp;gt;CLOSED&amp;lt;/font&amp;gt;&lt;br /&gt;
##### Ask on #automation or #releng if still unclear if there is a problem or not&lt;br /&gt;
# Many test failures&lt;br /&gt;
## Whenever ~25% or more of the tests fail it’s a sign of one of the following:&lt;br /&gt;
### Some problem in the config file &lt;br /&gt;
#### Action: check again the config file&lt;br /&gt;
### There is some watershed rule in place that causes older versions to not update directly to the latest version, but instead go through an intermediary version (e.g. https://bugzilla.mozilla.org/show_bug.cgi?id=1234277#c4)&lt;br /&gt;
#### Action: classify failures as &amp;quot;expected fail&amp;quot; with comment stating that it&#039;s due to watershed rules from bug X &lt;br /&gt;
### Some problem on Jenkins/Marionette (haven’t encountered such a situation)&lt;br /&gt;
#### Action: contact :whimboo, :AutomatedTester, :maja_zf (#automation, #releng, #release-drivers), or write directly on #automation, or #releng and ask for help&lt;br /&gt;
# Few test failures&lt;br /&gt;
## A low number of test failures can be caused by all sorts of intermittent bugs&lt;br /&gt;
### Action: pin the failure and rebuild&lt;br /&gt;
### If the test still fails after rebuilding it’s possible that the localized build does not exist, or there is a real issue so notify people on #release-drivers (especially whimboo if available as he can check what the problem is)&lt;br /&gt;
&lt;br /&gt;
== Rebuilding ==&lt;br /&gt;
If a run failed or you want to run it again for a platform, all you have to do is to rebuild it:&lt;br /&gt;
# In the pinboard click on the &#039;&#039;&#039;“Job details”&#039;&#039;&#039; tab&lt;br /&gt;
# Click on the link next to &#039;&#039;&#039;“Inspect Jenkins Build (VPN required):”&#039;&#039;&#039;&lt;br /&gt;
# This will bring you to the Jenkins page for that test - e.g. http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/23245/&lt;br /&gt;
# On this Jenkins page click the &#039;&#039;&#039;“Rebuild”&#039;&#039;&#039; link on the left of the page&lt;br /&gt;
# Now click the &#039;&#039;&#039;“Rebuild”&#039;&#039;&#039; button on the bottom of the page&lt;br /&gt;
# Several seconds after the test was rebuilt you should see a new entry on the Treeherder [https://treeherder.mozilla.org/#/jobs?repo=mozilla-esr45&amp;amp;revision=32eb8c423d67&amp;amp;filter-tier=3&amp;amp;filter-searchStr=Fxup-esr-localtest report] page with the same name as the one that failed (e.g. “lij-1”) but in gray (meaning it’s running), right next to the previously failed job - if the rebuild passes you will then see it in green and are all done&lt;br /&gt;
&lt;br /&gt;
== Taking node offline ==&lt;br /&gt;
If a run is aborted without clear reason (or tests fail because of some issues), you may need to take some node(s) offline, so people on the infra team can fix the problem and then take them back online. To take a node offline:&lt;br /&gt;
# In the pinboard (picture below) click on the &#039;&#039;&#039;“Job details”&#039;&#039;&#039; tab&lt;br /&gt;
# Click on the link next to &#039;&#039;&#039;“Inspect Jenkins Build (VPN required):”&#039;&#039;&#039;&lt;br /&gt;
# This will bring you to the Jenkins page for that test - e.g. http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/23245/&lt;br /&gt;
# Click on the machine link on the right of the page (e.g. [http://mm-ci-production.qa.scl3.mozilla.com:8080/computer/mm-win-81-64-3/ mm-win-81-64-3])&lt;br /&gt;
# Click “Make this node temporarily offline”&lt;br /&gt;
&lt;br /&gt;
== Cancel runs ==&lt;br /&gt;
In some cases (e.g. run triggered with bad config.ini) you may want to cancel the run, or individual jobs one by one:&lt;br /&gt;
# Cancel individual jobs - &#039;&#039;&#039;TESTED&#039;&#039;&#039; (should work properly)&lt;br /&gt;
## Go to Jenkins [http://mm-ci-production.qa.scl3.mozilla.com:8080/job/ondemand_update/ ondemand update] page&lt;br /&gt;
## In the Job Queue (left side) you should see which jobs are &#039;&#039;&#039;done&#039;&#039;&#039; (full green/red bar), which &#039;&#039;&#039;in progress&#039;&#039;&#039; (in progress green/red bar), and which &#039;&#039;&#039;pending&#039;&#039;&#039; (text)&lt;br /&gt;
## To cancel a job (In Progress or Pending):&lt;br /&gt;
### Click on the close (&#039;&#039;&#039;x&#039;&#039;&#039;) button on the right of the job link&lt;br /&gt;
### Click on the link for a job and then click the &#039;&#039;&#039;&amp;quot;x&amp;quot;&#039;&#039;&#039; icon on top right of the page&lt;br /&gt;
# Cancel the run - &#039;&#039;&#039;UNTESTED&#039;&#039;&#039; (may NOT work properly)&lt;br /&gt;
## Go to Jenkins [http://mm-ci-production.qa.scl3.mozilla.com:8080/job/trigger-ondemand/ trigger-ondemand] page&lt;br /&gt;
## Look for the run you want to cancel in the Build Queue (left side)&lt;br /&gt;
## Click on the close (&#039;&#039;&#039;x&#039;&#039;&#039;) button of the build you want to cancel&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/Updating_SDK_on_builders&amp;diff=1196479</id>
		<title>Mobile/Fennec/Android/Updating SDK on builders</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/Updating_SDK_on_builders&amp;diff=1196479"/>
		<updated>2018-06-30T02:00:06Z</updated>

		<summary type="html">&lt;p&gt;Garbas: new tokens and tooltool url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details how to update the remote builders&#039; SDK versions for Nightly builds, Treeherder, etc.&lt;br /&gt;
&lt;br /&gt;
== Legal notes ==&lt;br /&gt;
The Android SDK must have &amp;quot;internal&amp;quot; access rights because we are not allowed to distribute the SDK.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* A tooltool upload authorization token - create one at https://mozilla-releng.net/tokens/&lt;br /&gt;
&lt;br /&gt;
== Procedure ==&lt;br /&gt;
(If you&#039;re updating Gradle dependencies instead of the SDK, you can run a [https://gecko.readthedocs.org/en/latest/build/buildsystem/toolchains.html#firefox-for-android-with-gradle TaskCluster job] to create the new build dependencies. Otherwise...)&lt;br /&gt;
&lt;br /&gt;
* Download the [http://developer.android.com/sdk/index.html#Other latest Android SDK for Linux] &lt;br /&gt;
&lt;br /&gt;
* Download the packages necessary for building. On Linux, this can be done via the `android` utility (in the downloaded SDK, not locally!). For other platforms, see below. You can verify which packages need to be installed by comparing with the android SDK currently available for the builders on tooltool (see the downloading section below). Currently (6/4/15), these tools are:&lt;br /&gt;
** Tools (the version supplied with the SDK may be outdated)&lt;br /&gt;
** Platform&lt;br /&gt;
** Platform tools&lt;br /&gt;
** Build tools&lt;br /&gt;
** Android Support Library&lt;br /&gt;
** Google Play services&lt;br /&gt;
&lt;br /&gt;
* Place the downloaded packages into the downloaded SDK, following the pattern of an existing SDK (either from tooltool, or your own local install). Note that the packages often rename themselves after unzipping (e.g. mine were called &amp;quot;android-5.1). Currently (6/4/15), this looks like:&lt;br /&gt;
**build-tools/&amp;lt;version&amp;gt;&lt;br /&gt;
**extras/android/support&lt;br /&gt;
**extras/google/google_play_services&lt;br /&gt;
**platforms/android-&amp;lt;#&amp;gt;&lt;br /&gt;
**platform-tools/&lt;br /&gt;
**tools/&lt;br /&gt;
&lt;br /&gt;
* Compress the SDK! The filename is currently android-sdk.tar.xz (i.e. compressed with xz, unclear if this is a requirement). To tar (because, you know, those flags): `tar -cJf android-sdk.tar.xz android-sdk-linux`. On OS X, tar does not support xz by default - you can download gnu-tar (`brew install gnu-tar`) and run the command above, substituting `gtar` for `tar`. Note: this can take a while.&lt;br /&gt;
&lt;br /&gt;
* Upload the SDK via [https://wiki.mozilla.org/ReleaseEngineering/Applications/Tooltool tooltool].&lt;br /&gt;
** Get (or update) tooltool: `git clone http://github.com/mozilla/build-tooltool`&lt;br /&gt;
** Add the SDK to the upload manifest: `python &amp;lt;path-to-tooltool&amp;gt;/tooltool.py add --visibility internal android-sdk.tar.xz`. This will output a new manifest.tt file or amend an existing one.  Note that the `--visibility internal` is critical for compliance with Google&#039;s license!&lt;br /&gt;
** Get an upload authentication token via https://mozilla-releng.net/tokens/ (provided you have the permissions - ping garbas on IRC to get it)&lt;br /&gt;
** Upload the SDK: `python &amp;lt;path-to-tooltool&amp;gt;/tooltool.py upload --authentication-file=&amp;lt;path-to-auth-token&amp;gt; --message &amp;quot;Bug ###: &amp;lt;message&amp;gt;&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
* Update the builder configuration files to point at the new uploaded SDK: follow the model of [https://bugzilla.mozilla.org/show_bug.cgi?id=1165422 bug 1165422]. Use the information in the manifest.tt file update the configs.&lt;br /&gt;
&lt;br /&gt;
* Consider if there&#039;s anything else to update (e.g. gradle build versions. see also [https://bugzilla.mozilla.org/show_bug.cgi?id=1165422 bug 1165422])&lt;br /&gt;
&lt;br /&gt;
* (Maybe? I did) Add a CLOBBER (i.e. edit the CLOBBER file)&lt;br /&gt;
&lt;br /&gt;
* Test it! Push it to try.&lt;br /&gt;
&lt;br /&gt;
* Green? Land it!&lt;br /&gt;
&lt;br /&gt;
== Downloading tools on non-Linux machines ==&lt;br /&gt;
You can&#039;t run the `android` binary locally so you&#039;ll have to download the tools from the URLs directly: &lt;br /&gt;
* Run `android list sdk` - it&#039;ll output it the source XML for the various tools it can install. For the primary packages, this is currently located [https://dl.google.com/android/repository/repository-10.xml here].&lt;br /&gt;
* Open the url (e.g. `curl &amp;lt;url&amp;gt; | less`) and look through the XML for the tools at the versions you need them. The XML tags follow a pattern:&lt;br /&gt;
** Tools: &amp;lt;sdk:tool&amp;gt;&lt;br /&gt;
** Platform: &amp;lt;sdk:platform&amp;gt;&lt;br /&gt;
** Platform tools: &amp;lt;sdk:platform-tool&amp;gt;&lt;br /&gt;
** Build tools: &amp;lt;sdk:build-tool&amp;gt;&lt;br /&gt;
** Android Support Library: (separate xml file) &amp;lt;sdk:extra&amp;gt;&lt;br /&gt;
** Google Play services: (separate xml file) &amp;lt;sdk:extra&amp;gt;&lt;br /&gt;
* Look for an &amp;lt;sdk:url&amp;gt; tag. If it&#039;s a full url, you&#039;re in! Otherwise, guess at the URL based on where you downloaded the SDK and look at some other urls in the file. See the [[#Example URLs|example URLs]].&lt;br /&gt;
&lt;br /&gt;
=== Example URLs ===&lt;br /&gt;
* Platform: https://dl-ssl.google.com/android/repository/android-22_r02.zip&lt;br /&gt;
* Platform tools: https://dl-ssl.google.com/android/repository/platform-tools_r22-linux.zip&lt;br /&gt;
* Build tools: https://dl-ssl.google.com/android/repository/build-tools_r22.0.1-linux.zip&lt;br /&gt;
* Android Support Library: https://dl-ssl.google.com/android/repository/support_r19.1.zip&lt;br /&gt;
* Google Play Services: https://dl-ssl.google.com/android/repository/google_play_services_7571000_r25.zip&lt;br /&gt;
&lt;br /&gt;
== Downloading previously uploaded files ==&lt;br /&gt;
Motivation: maybe you need to double-check the format of the previous SDK.&lt;br /&gt;
&lt;br /&gt;
Note that you&#039;ll need an auth token because the access rights on the SDK are internal.&lt;br /&gt;
*For the most recent SDK, look [https://dxr.mozilla.org/mozilla-central/source/mobile/android/config/tooltool-manifests/android/releng.manifest here].&lt;br /&gt;
**Alternatively, for older files, go to [https://mozilla-releng.net/tooltool/ tooltool] and find the file you want to download. For the SDK, searching for the bug number seems most optimal. There may also be a download button on the page, in order to skip the steps through the tooltool script below.&lt;br /&gt;
*Write a manifest file using the info collected on tooltool (note: sha512 is always used), e.g.:&lt;br /&gt;
 [&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;size&amp;quot;: 329217868,&lt;br /&gt;
 &amp;quot;digest&amp;quot;: &amp;quot;1cf54f12c271a2eea8f03caafa458207768ba12400cf53d742e3c4654a32b18fb75d8e0dece95e27691695751a6f6514ccb724b1a74958948c5f111c5c00da4f&amp;quot;,&lt;br /&gt;
 &amp;quot;algorithm&amp;quot;: &amp;quot;sha512&amp;quot;,&lt;br /&gt;
 &amp;quot;filename&amp;quot;: &amp;quot;android-sdk.tar.xz&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 ]&lt;br /&gt;
*Download the file! e.g.&lt;br /&gt;
 python &amp;lt;path-to-tooltool&amp;gt;/tooltool.py fetch --url https://mozilla-releng.net/tooltool/ \&lt;br /&gt;
   -m &amp;lt;path-to-manifest&amp;gt; --authentication-file=&amp;lt;path-to-auth-file&amp;gt;&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Mapper&amp;diff=1196478</id>
		<title>ReleaseEngineering/Applications/Mapper</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Mapper&amp;diff=1196478"/>
		<updated>2018-06-30T01:54:42Z</updated>

		<summary type="html">&lt;p&gt;Garbas: new mapper url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is it? =&lt;br /&gt;
When we convert hg repositories to git, and vice versa, the hg changeset SHA (the 40 character hexadecimal string that you get when you commit a change) is different to the git commit id (the equivalent SHA used by git).&lt;br /&gt;
&lt;br /&gt;
In order to keep track of which hg changeset SHAs relate to which git commit SHAs, we keep a database of the mappings, together with details about the project the SHAs come from, and what time they were inserted into the database.&lt;br /&gt;
&lt;br /&gt;
The vcs sync tool (checked into mozharness) is the tool which performs the conversion between hg repos and git repos, and this is documented separately. It is responsible for performing the conversion - this is outside the scope of mapper.&lt;br /&gt;
&lt;br /&gt;
Mapper is a rest api, that allows:&lt;br /&gt;
# insertion of new mappings and projects (a &amp;quot;project&amp;quot; is essentially the name of the repo - e.g. build-tools) (HTTP POST)&lt;br /&gt;
# insertion of git/hg mappings for a given project (HTTP POST)&lt;br /&gt;
# retrieval of mappings for a given project (HTTP GET)&lt;br /&gt;
&lt;br /&gt;
Behind the scenes, it is reading/writing from the database (using sqlalchemy).&lt;br /&gt;
&lt;br /&gt;
Note: the vcs sync tool is a client of the mapper: it is vcs sync that inserts into mapper (i.e. uses the HTTP POST methods).&lt;br /&gt;
The other clients of mapper will be:&lt;br /&gt;
# people / developers - wanting to query mappings&lt;br /&gt;
# b2g_build.py - the build script for b2g - since this needs to lookup shas in order to reference frozen commit versions in manifests&lt;br /&gt;
&lt;br /&gt;
Mapper is written as a RelEng API blueprint - please note RelEng API has its [https://docs.mozilla-releng.net/projects/releng-mapper.html own documentation] too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mapper Development &amp;amp; Deployment =&lt;br /&gt;
&lt;br /&gt;
The mapper is a project in [https://github.com/mozilla-releng/services mozilla-releng/services] repository, and so the details about how to deploy locally for development, and where the staging/production environments are, can be seen in the [https://docs.mozilla-releng.net/ RelEngAPI documentation].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mapper Data Feed =&lt;br /&gt;
&lt;br /&gt;
VCS Sync is making HTTP Post requests to mapper, providing new mappings for mapper to insert into its database.&lt;br /&gt;
&lt;br /&gt;
= API methods =&lt;br /&gt;
&lt;br /&gt;
Below is a summary of the 4 unauthenticated API methods currently usable, together with example urls from the production environment.&lt;br /&gt;
&lt;br /&gt;
For fuller details, and endpoints requiring authentication, the in process documentation is authoritative: [https://mapper.mozilla-releng.net/docs production] or [https://mapper.staging.mozilla-releng.net/docs staging] instances.&lt;br /&gt;
&lt;br /&gt;
== GET Routes ==&lt;br /&gt;
&lt;br /&gt;
=== Returns a mapping pair ===&lt;br /&gt;
* GET:  /&amp;lt;project&amp;gt;/rev/&amp;lt;vcs_type&amp;gt;/&amp;lt;commit&amp;gt;&lt;br /&gt;
* Example: https://mapper.mozilla-releng.net/build-puppet/rev/git/69d64a8a18e6e001eb015646a82bcdaba0e78a24&lt;br /&gt;
* Example: https://mapper.mozilla-releng.net/build-puppet/rev/hg/68f1b2b9996c4e33aa57771b3478932c9fb7e161&lt;br /&gt;
&lt;br /&gt;
=== Returns full mapfile for a given project ===&lt;br /&gt;
* GET:  /&amp;lt;project&amp;gt;/mapfile/full&lt;br /&gt;
* Example: https://mapper.mozilla-releng.net/build-puppet/mapfile/full&lt;br /&gt;
&lt;br /&gt;
=== Returns a subset of a mapfile, since a given date ===&lt;br /&gt;
* GET:  /&amp;lt;project&amp;gt;/mapfile/since/&amp;lt;since&amp;gt;&lt;br /&gt;
* Example: https://mapper.mozilla-releng.net/build-mozharness/mapfile/since/29.05.2014%2017:02:09%20CEST&lt;br /&gt;
&lt;br /&gt;
=== Returns list of projects ===&lt;br /&gt;
* GET:  /projects&lt;br /&gt;
* Example: https://mapper.mozilla-releng.net/projects&lt;br /&gt;
&lt;br /&gt;
= Staging =&lt;br /&gt;
&lt;br /&gt;
The staging environment is available under https://mapper.staging.mozilla-releng.net (Look under &amp;quot;Documentation&amp;quot; to find details.)&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Tooltool&amp;diff=1181970</id>
		<title>ReleaseEngineering/Applications/Tooltool</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=ReleaseEngineering/Applications/Tooltool&amp;diff=1181970"/>
		<updated>2017-10-09T12:21:05Z</updated>

		<summary type="html">&lt;p&gt;Garbas: don&amp;#039;t suggest to use --url anymore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tooltool basics =&lt;br /&gt;
&lt;br /&gt;
Some of the jobs in the releng infrastructure make use of generic binary artifacts, which are stored in dedicated artifacts repositories.&lt;br /&gt;
&lt;br /&gt;
Tooltool is the client program, written in Python, which is used to retrieve these artifacts from the servers, and to perform integrity checks on them based on hashcode verification. Hence, the servers storing these artifacts are named &amp;quot;tooltool servers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A set of files to be fetched by tooltool is specified via a tooltool manifest, usually a file in JSON format with tt extension.&lt;br /&gt;
&lt;br /&gt;
The following is an example of a valid tooltool manifest:&lt;br /&gt;
&lt;br /&gt;
  [&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;size&amp;quot;: 139308,&lt;br /&gt;
  &amp;quot;digest&amp;quot;: &amp;quot;b2a463249bb3a9e7f2a3604697b000d2393db4f37b623fc099beb8456fbfdb332567013a3131ad138d8633cb19c50a8b77df3990d67500af896cada8b6f698b4&amp;quot;,&lt;br /&gt;
  &amp;quot;algorithm&amp;quot;: &amp;quot;sha512&amp;quot;,&lt;br /&gt;
  &amp;quot;filename&amp;quot;: &amp;quot;file2.pdf&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;size&amp;quot;: 3017536,&lt;br /&gt;
  &amp;quot;digest&amp;quot;: &amp;quot;630d01a329c70aedb66ae7118d12ff7dc6fe06223d1c27b793e1bacc0ca84dd469ec1a6050184f8d9c35a0636546b0e2e5be08d9b51285e53eb1c9f959fef59d&amp;quot;,&lt;br /&gt;
  &amp;quot;algorithm&amp;quot;: &amp;quot;sha512&amp;quot;,&lt;br /&gt;
  &amp;quot;filename&amp;quot;: &amp;quot;file1.pdf&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;size&amp;quot;: 3420686,&lt;br /&gt;
  &amp;quot;digest&amp;quot;: &amp;quot;931eb84f798dc9add1a10c7bbd4cc85fe08efda26cac473411638d1f856865524a517209d4c7184d838ee542c8ebc9909dc64ef60f8653a681270ce23524e8e4&amp;quot;,&lt;br /&gt;
  &amp;quot;algorithm&amp;quot;: &amp;quot;sha512&amp;quot;,&lt;br /&gt;
  &amp;quot;filename&amp;quot;: &amp;quot;file3.pdf&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  ]&lt;br /&gt;
&lt;br /&gt;
The simplest usecase for tooltool is to provide a manifest and the url of a tooltool server (this url is not longer used, the last modified file is from 13-Oct-2015) , and run a &amp;quot;fetch&amp;quot; command to download the files mentioned in the manifest:&lt;br /&gt;
&lt;br /&gt;
  python  tooltool.py fetch -m my-manifest.tt&lt;br /&gt;
&lt;br /&gt;
If a manifest name is not provided, tooltool will default to manifest.tt.&lt;br /&gt;
&lt;br /&gt;
Tooltool is build on https://api.pub.build.mozilla.org/tooltool/ and to find the uploaded file you can search after : Filename,SHA512 hash,Upload author or Upload message (including bug number).&lt;br /&gt;
&lt;br /&gt;
example: search after &amp;quot;mitmproxy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tooltool download servers are simply apache server folders with a flat structure (all files are stored at root level with no subfolders).&lt;br /&gt;
&lt;br /&gt;
There are global options and command arguments.  All terminal interactions after the option parser finishes is done through the Python logging API.  The default is to print logging.INFO and higher messages.  Currently, the following global options exist:&lt;br /&gt;
&lt;br /&gt;
    -q/--quiet tells Tooltool to print only logging.ERROR and higher messages&lt;br /&gt;
    -v/--verbose specifies to print logging.INFO and higher&lt;br /&gt;
    -m/--manifest &amp;lt;file&amp;gt; instructs Tooltool to reference a manifest file located at the specified path&lt;br /&gt;
    -d/--algorithm &amp;lt;algorithm&amp;gt; instructs Tooltool to use the specified algorithm&lt;br /&gt;
    -o/--overwrite tells Tooltool to overwrite a local file if the filename matches the manifest but the hash value is different to the manifest&lt;br /&gt;
    --url specifies the base url to be used for remote operations&lt;br /&gt;
&lt;br /&gt;
= Where&#039;s tooltool code? =&lt;br /&gt;
&lt;br /&gt;
Tooltool&#039;s main dev repo is [https://github.com/mozilla/build-tooltool https://github.com/mozilla/build-tooltool].&lt;br /&gt;
&lt;br /&gt;
The version of tooltool which is actually deployed in our infrastructure is in https://hg.mozilla.org/build/puppet/file/default/modules/packages/templates/tooltool.py. The tooltool.py file in the puppet repo should be in sync with the main dev repo (they should be identical, apart from the she-bang line).&lt;br /&gt;
&lt;br /&gt;
= Listing and Validating =&lt;br /&gt;
&lt;br /&gt;
The two most basic commands list a manifest and validate the local files against the manifest.  The list command lists out all of the files in the manifest as well as whether they are present and/or valid.  The return code from listing is zero unless there was an error in listing the files.  Absent or invalid files will still result in an exit code of zero if there was no error in the listing process.  The validate command is used to check if all the files in the manifest are present and valid.  The exit code for validating is zero if all files in the manifest are present and their hash matches the manifest.  It is non-zero if any file is missing locally or the file does not have the same hash as the manifest.&lt;br /&gt;
&lt;br /&gt;
= Other tooltool features =&lt;br /&gt;
&lt;br /&gt;
== The tooltool cache ==&lt;br /&gt;
 &lt;br /&gt;
This has been implemented in bug [https://bugzilla.mozilla.org/show_bug.cgi?id=858635 https://bugzilla.mozilla.org/show_bug.cgi?id=858635]&lt;br /&gt;
All the bellow examples are used for the older packages that are on &amp;quot;http://tooltool.pub.build.mozilla.org/temp-sm-stuff&amp;quot; url.&lt;br /&gt;
When connecting to a tooltool server to fetch a file, it is now possible to use a local cache specifying the local cache folder with the -c option, e.g.:&lt;br /&gt;
&lt;br /&gt;
  python  tooltool.py fetch --url http://tooltool.pub.build.mozilla.org/temp-sm-stuff -c ~/cache&lt;br /&gt;
&lt;br /&gt;
In the previous example, folder ~/cache will be inspected for artifacts before connecting to the specified tooltool server. If the specified cache folder does not exist, tooltool will create it (if the user running tooltool has permissions to do so!).&lt;br /&gt;
Purging the cache with the purge command&lt;br /&gt;
&lt;br /&gt;
A mechanism to purge the tooltool cache has been implemented as a separate command. Let&#039;s see some examples of purge commands:&lt;br /&gt;
&lt;br /&gt;
  python  tooltool.py purge -c ~/cache&lt;br /&gt;
  python  tooltool.py purge -c ~/cache -s 34&lt;br /&gt;
  python  tooltool.py purge -c ~/cache --size 34&lt;br /&gt;
&lt;br /&gt;
In the first example, we are cleaning up the tooltool cache completely, i.e.: all the content will be wiped out&lt;br /&gt;
&lt;br /&gt;
In the second and third example the extra parameter -s (or, in extended form, --size) is provided, which specifies the number of Gigs we want to be free at the end of the purging process. Tooltool will delete files in the cache folder, starting with the oldest ones, until the specified amount of gigs is free on disk. When there is more free space that the specified gigs when the command is invokes, no files will be deleted at all.&lt;br /&gt;
&lt;br /&gt;
=== Enabling automated tooltool cache purge within purge_build.py ===&lt;br /&gt;
&lt;br /&gt;
Since the purge_builds.py script (within the build-tools repo) is already responsible of clean-up operations, the option of cleaning the tooltool cache has been added to that script as well.&lt;br /&gt;
&lt;br /&gt;
In order for the automated cleanup to take place, two environment variables need to be setup when purge_builds.py is invoked, and namely:&lt;br /&gt;
&lt;br /&gt;
  TOOLTOOL_HOME: the folder containing tooltool.py&lt;br /&gt;
  TOOLTOOL_CACHE: the local folder being used as tooltool cache (which will be cleaned up)&lt;br /&gt;
&lt;br /&gt;
= How Tooltool is invoked in build/test jobs =&lt;br /&gt;
&lt;br /&gt;
Two wrapper scripts exist which are usually being used to invoke tooltool in build/test jobs:&lt;br /&gt;
* tooltool_wrapper.sh: http://hg.mozilla.org/build/tools/file/327616201e98/scripts/tooltool/tooltool_wrapper.sh&lt;br /&gt;
* TooltoolMixin class for mozharness calls: https://hg.mozilla.org/mozilla-central/file/default/testing/mozharness/mozharness/mozilla/tooltool.py (despite being an Homonym of tooltool itself, this is a python module defining TooltoolMixin class to be used in mozharness calls).&lt;br /&gt;
&lt;br /&gt;
= How To Upload To Tooltool  =&lt;br /&gt;
&lt;br /&gt;
{{note|Make sure you&#039;re using the latest tooltool.py from https://github.com/mozilla/build-tooltool}}&lt;br /&gt;
&lt;br /&gt;
First, plan out your upload.  Are all of the files you need to upload public?  If not, tooltool also offers storage of &amp;quot;internal&amp;quot; files, which are not made publicly available but can be downloaded by those with proper permissions.  Internal files might be under a non-redistribution license (e.g., Google SDKs, Microsoft DLLs), but &#039;&#039;&#039;must not include secrets&#039;&#039;&#039; such as passwords or private keys.&lt;br /&gt;
&lt;br /&gt;
Use the `tooltool.py` client to build a manifest containing the files you would like to upload, annotating each file with its visibility level:&lt;br /&gt;
&lt;br /&gt;
    python tooltool.py add --visibility public gcc.tar.gz&lt;br /&gt;
&lt;br /&gt;
Next, you will need credentials for the upload.  Tooltool is hosted on RelengAPI, so the credentials take the form of a RelengAPI token.  To get such a token, to to https://api.pub.build.mozilla.org, log in, click on &amp;quot;Tokens&amp;quot;, and issue a user token with the permissions &#039;&#039;tooltool.upload.internal&#039;&#039; and/or &#039;&#039;tooltool.upload.public&#039;&#039;, depending on the nature of your upload.  If you don&#039;t have internal permission, then the option won&#039;t be available to you.  When you click &amp;quot;Issue&amp;quot;, you&#039;ll get a long string which you should copy/paste into a (protected) file on your system, and pass to tooltool.py with &#039;&#039;--authentication-file&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Once all of that is in place, you&#039;re ready to perform the upload.  Just like for a Git or Mercurial commit, you&#039;ll need to provide a message to indicate why you&#039;re making this upload.  Including a bug reference is always helpful.Also make sure the &amp;quot;file&amp;quot; is in the same repository from where you run tooltool.&lt;br /&gt;
&lt;br /&gt;
    python tooltool.py upload &amp;quot;file&amp;quot; --authentication-file=~/.tooltool-token --message &amp;quot;Bug 1234567: add new frobnicator binaries&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tool will begin uploading and, when it&#039;s finished, may wait a minute or two longer until the files are verified by RelengAPI.  If your upload fails for some reason, just restart it.  Any files already completely uploaded will not need to be uploaded again.&lt;br /&gt;
&lt;br /&gt;
You can view the available files and uploads at https://api.pub.build.mozilla.org/tooltool.&lt;br /&gt;
&lt;br /&gt;
= Tooltool uploads: the old school =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;This is the old-school, deprecated, manual way to upload artifacts to tooltool. Please use the official procedure described above whenever possible, in order to keep information about what is uploaded, by whom, and why (the manual procedure doesn&#039;t allow to store any metadata about uploads).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to upload from your own laptop (because, eg, you have a slow uplink) you can do this from cruncher.&lt;br /&gt;
&lt;br /&gt;
Access cruncher with your credentials:&lt;br /&gt;
 ME=&amp;quot;your_short_ldap_username&amp;quot; # or `whoami`&lt;br /&gt;
 ssh -A $ME@cruncher.build.mozilla.org&lt;br /&gt;
Download the file and then:&lt;br /&gt;
 scp filename.tar.xz $ME@relengwebadm.private.scl3.mozilla.com:&lt;br /&gt;
Login to relengwebadmn:&lt;br /&gt;
 ssh $ME@relengwebadm.private.scl3.mozilla.com&lt;br /&gt;
And deploy the file to tooltool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FILE=~/emulator.zip # or whatever you&#039;re uploading&lt;br /&gt;
export SHA512=`openssl sha512 $FILE | cut -d&#039; &#039; -f2`&lt;br /&gt;
sudo mv -i $FILE /mnt/netapp/relengweb/tooltool/pvt/build/sha512/${SHA512}&lt;br /&gt;
sudo chmod 644  /mnt/netapp/relengweb/tooltool/pvt/build/sha512/${SHA512}&lt;br /&gt;
ls -l  /mnt/netapp/relengweb/tooltool/pvt/build/sha512/${SHA512}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the filename, filesize, and sha512 digest to the bug you are working on.  These can be added to the tooltool manifests later.&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Webdev/Meetings/2017/May&amp;diff=1169983</id>
		<title>Webdev/Meetings/2017/May</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Webdev/Meetings/2017/May&amp;diff=1169983"/>
		<updated>2017-05-02T16:26:14Z</updated>

		<summary type="html">&lt;p&gt;Garbas: my topic for the day&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WebdevMeetingInfobox&lt;br /&gt;
  |date=May 2nd, 2017&lt;br /&gt;
  |airmo=https://air.mozilla.org/webdev-extravaganza-may-2017/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Webdev Extravaganzas are open to the public and serve as a gathering point for anyone in the Mozilla community who is interested in web development and what Mozilla has been doing in it.&lt;br /&gt;
&lt;br /&gt;
The meeting will be streamed and recorded on Air Mozilla: https://air.mozilla.org/webdev-extravaganza-may-2017/&lt;br /&gt;
&lt;br /&gt;
== Shipping Celebration ==&lt;br /&gt;
What did we ship this month? Alternatively, what didn&#039;t we ship to spare the world the horror?&lt;br /&gt;
&lt;br /&gt;
* (shobson) MDN&#039;s CSS code style guide is now documented in a [https://github.com/mozilla/kuma/blob/master/.stylelintrc%20 .stylelintrc] file, the [https://stylelint.io/ Stylelint.io] format. So it can be enforced on Pull Requests and supporting text editors can pop up friendly little error messages and warnings.&lt;br /&gt;
* (pmac) New library! [https://github.com/pmac/django-redirect-urls django-redirect-urls] was extracted from Bedrock. It was created to ease the task of replicating a lot of Apache URL rewriting rules in our code. It is now its own library so that other projects (most notably MDN) can potentially use it. Most other Django redirect helpers store redirects in the database.&lt;br /&gt;
&lt;br /&gt;
* (garbas) Moved https://mozilla-releng.net from Elm 0.17 to 0.18&lt;br /&gt;
&lt;br /&gt;
== Open-Source Citizenship ==&lt;br /&gt;
Any updates with our libraries or with libraries we use? Anyone looking for help with a library they maintain?&lt;br /&gt;
&lt;br /&gt;
* (garbas) [https://github.com/zalando/connexion connexion], Swagger/OpenAPI First framework for Python on top of Flask with automatic endpoint validation &amp;amp; OAuth2 support. Since few weeks, not only Flask is supported (Pyramid/Falcon) and it is possible to plugin you custom framework too. &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
== New Hires / Interns / Volunteers / Contributors ==&lt;br /&gt;
Anyone new that we want to induct into the secret order? Paid, unpaid, contract, doesn&#039;t matter!&lt;br /&gt;
&lt;br /&gt;
* (irc nick of new person) New Person&lt;br /&gt;
&lt;br /&gt;
== Roundtable ==&lt;br /&gt;
Anything else to talk about?&lt;br /&gt;
&lt;br /&gt;
* (garbas) Sphinx theme with new Mozilla branding?&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Webdev/Meetings/2017/March&amp;diff=1164473</id>
		<title>Webdev/Meetings/2017/March</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Webdev/Meetings/2017/March&amp;diff=1164473"/>
		<updated>2017-03-03T13:34:20Z</updated>

		<summary type="html">&lt;p&gt;Garbas: adding mozilla-releng things that happen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WebdevMeetingInfobox&lt;br /&gt;
  |date=March 7th, 2017&lt;br /&gt;
  |airmo=https://air.mozilla.org/webdev-extravaganza-march-2017/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Webdev Extravaganzas are open to the public and serve as a gathering point for anyone in the Mozilla community who is interested in web development and what Mozilla has been doing in it.&lt;br /&gt;
&lt;br /&gt;
The meeting will be streamed and recorded on Air Mozilla: https://air.mozilla.org/webdev-extravaganza-march-2017/&lt;br /&gt;
&lt;br /&gt;
== Shipping Celebration ==&lt;br /&gt;
What did we ship this month? Alternatively, what didn&#039;t we ship to spare the world the horror?&lt;br /&gt;
&lt;br /&gt;
* [garbas] TreeStatus: https://mozilla-releng.net/treestatus&lt;br /&gt;
* (irc nick) Topic&lt;br /&gt;
&lt;br /&gt;
== Open-Source Citizenship ==&lt;br /&gt;
Any updates with our libraries or with libraries we use? Anyone looking for help with a library they maintain?&lt;br /&gt;
&lt;br /&gt;
* (irc nick) Topic&lt;br /&gt;
&lt;br /&gt;
== New Hires / Interns / Volunteers / Contributors ==&lt;br /&gt;
Anyone new that we want to induct into the secret order? Paid, unpaid, contract, doesn&#039;t matter!&lt;br /&gt;
&lt;br /&gt;
* (irc nick of new person) New Person&lt;br /&gt;
&lt;br /&gt;
== Roundtable ==&lt;br /&gt;
Anything else to talk about?&lt;br /&gt;
&lt;br /&gt;
* [garbas] In the summer of 2016 we (in RelEng) decided to use Elm to build our frontends. After 6 months and 10k lines of Elm I can finally share our experience with Elm.&lt;br /&gt;
* (irc nick) Topic&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162599</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162599"/>
		<updated>2017-02-10T14:22:45Z</updated>

		<summary type="html">&lt;p&gt;Garbas: technologies we are using in github.com/mozilla-releng/services&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [http://angleproject.org/ ANGLE]              || A conformant OpenGL ES implementation for Windows, Mac and Linux || Platform Graphics Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/argonjs Argon]  || Used as the foundation for mobile AR web browser research by Emerging Tech || Blair MacIntyre&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://cffi.readthedocs.io/en/latest/ cffi] || C Foreign Function Interface for Python. || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/ConfigArgParse ConfigArgParse] || A drop-in replacement for argparse that allows options to also be set via config files and/or environment variables || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [http://crt.sh/ crt.sh] || Global certificate corpus search website || Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, nucleus, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://drupal.org/ Drupal] || Open Source CMS. Used by Dev Rel team. || Potch&lt;br /&gt;
|- &lt;br /&gt;
| [https://pypi.python.org/pypi/ecdsa ecdsa] || ECDSA cryptographic signature library (pure python) || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData), Jason Thomas&lt;br /&gt;
|-&lt;br /&gt;
| [http://elm-lang.org/ Elm] || A delightful language for reliable webapps. || Rok Garbas (garbas), Release Engineering Team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://emojione.com/ EmojiOne] || Upstream Emoji artwork used in the Firefox built-in Emoji font || Tim Chien ([https://github.com/mozilla/emojione-colr See emojione-colr])&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://ffmpeg.org/ ffmpeg] || Used for media decoding. || Jean-Yves Avenard&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://flowtype.org/ Flow] ||  A static type checker for JavaScript || Greg Tatum, Jason Laster&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://fontforge.github.io/en-US/ FontForge] || Built-in Emoji font compilation || Tim Chien ([https://github.com/mozilla/emojione-colr See emojione-colr])&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/FontTools FontTools] || Built-in Emoji font compilation || Tim Chien ([https://github.com/mozilla/emojione-colr See emojione-colr])&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.freetype.org/ FreeType] || Small, efficient, highly customizable, and portable library for producing high-quality output (glyph images) of most vector and bitmap font formats. || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [http://https://www.sourceware.org/gdb/ GDB]  || The GNU Debugger, the sole debugger for Linux || Jim Blandy&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://graphite.sil.org/ Graphite]                    || Graphite is a &amp;quot;smart font&amp;quot; system developed specifically to handle the complexities of lesser-known languages of the world. || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://python-hyper.org/en/latest/ hyper] || Hyper is a set of related projects that provide HTTP/2 functionality to Python projects. || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/icecc/icecream Icecream (icecc)] || Distributed build system, used to speed up local Firefox build times in some Mozilla offices || Daniel Holbert, or contributors on the [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Using_Icecream Icecream MDN Page]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| [http://libevent.org/ libevent] || Provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceware.org/libffi/ libffi] || A Portable Foreign Function Interface Library. || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://libjpeg-turbo.virtualgl.org/ libjpeg-turbo] || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|- &lt;br /&gt;
| [https://pypi.python.org/pypi/marshmallow marshmallow] || A lightweight library for converting complex datatypes to and from native Python datatypes. || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Shyam Mani&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Matt Pressman&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Linda Ypulong&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [https://neovim.io/ neovim] (nvim) || Next-generation vim code editor || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org/Nix Nix] || Reproducible build tool. || Rok Garbas (garbas), Release Engineering Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nginx.com/resources/wiki/contributing/github/ nginx]  || Web Server. Used by almost everything CloudOps runs. || Travis Blow&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.mozilla.org/NSS NSS]  || Network Security Services || jcjones? &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://pdfium.googlesource.com/pdfium/ PDFium]            || PDF viewing and printing in Firefox || Peter Van Der Beken, Evelyn Hung&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/JetBrains/intellij-community/tree/master/python PyCharm] || Python IDE || Jonathan Griffin&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cryptography python cryptography] || cryptography is a package which provides cryptographic recipes and primitives to Python developers. || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://python-jose.readthedocs.io/en/latest/ python-jose] || a JavaScript Object Signing and Encryption (JOSE) implementation in python || Cloud Services Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann, Jason Thomas&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/raven Raven] || Raven is a python client for Sentry || Cloud services Team&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://redux.js.org/ Redux] || Redux is a predictable state container for JavaScript apps. || Jason Laster&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [https://sass-lang.com/ Sass]         || CSS Preprocessor. Most big team web projects use Sass these days. ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://skia.org/ Skia] || A complete 2D graphic library for drawing Text, Geometries, and Images || Platform Graphics Team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/twitter/twemoji twemoji] || Upstream Emoji artwork used in the Firefox built-in Emoji font (minor source) ||  Tim Chien ([https://github.com/mozilla/emojione-colr See emojione-colr])&lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/microsoft/vscode/ vscode] || Code editor || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://yasm.tortall.net/ yasm] || Assembler used by the build system. || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://valloric.github.io/YouCompleteMe/ YouCompleteMe] || Code completion engine for vim editors || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Garbas</name></author>
	</entry>
</feed>