Add firmware tarball to the list of build artifacts to download

Firmware build artifacts need to be available for reprogramming DUTs
in the autotest lab. This change includes the entire firmware tarball
(~16MB in size) into the set of files downloaded from gs image
archive. Missing firmware tarball will not cause a failure.

BUG=chromium-os:37467
TEST=manual
  . start a local instance of devserver
     ./devserver.py --archive_dir=/var/devserver --logfile=/tmp/devserver.log
  . in a different terminal ran
    $ for cmd in download wait_for_status
      do
        curl http://localhost:8080/$cmd?archive_url='gs://chromeos-image-archive/link-release/R26-3494.0.0'
      done
    $ ls -ltr /var/devserver/link-release/R26-3494.0.0/
    total 444592
    -rw-r--r-- 1 vbendeb vbendeb         0 Jan  1 16:57 cros-dell0.CP%20Server%20Thread-6-30156
    -rw-r--r-- 1 vbendeb vbendeb         0 Jan  1 16:57 chromiumos_test_image.bin
    drwxr-xr-x 4 vbendeb vbendeb      4096 Jan  1 16:57 au/
    -rw-r--r-- 1 vbendeb vbendeb 372863714 Jan  1 16:57 update.gz
    -rw-r--r-- 1 vbendeb vbendeb  66435120 Jan  1 16:57 stateful.tgz
    -rw-r--r-- 1 vbendeb vbendeb  15928789 Jan  1 16:57 firmware_from_source.tar.bz2
    drwxr-xr-x 7 vbendeb vbendeb     24576 Jan  1 16:58 autotest/
    -rw-r--r-- 1 vbendeb vbendeb         0 Jan  1 16:58 staged.timestamp

Change-Id: I6d19abe046eae5f0ef8739230a758fd5934919a6
Reviewed-on: https://gerrit.chromium.org/gerrit/40258
Tested-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-by: Chris Sosa <sosa@chromium.org>
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
diff --git a/common_util.py b/common_util.py
index 1466751..ec4c31b 100644
--- a/common_util.py
+++ b/common_util.py
@@ -59,21 +59,23 @@
 
 
 def ParsePayloadList(archive_url, payload_list):
-  """Parse and return the full/delta payload URLs.
+  """Parse and return the full, delta, and firmware payload URLs.
 
   Args:
     archive_url: The URL of the Google Storage bucket.
     payload_list: A list filenames.
 
   Returns:
-    Tuple of 3 payloads URLs: (full, nton, mton).
+    Tuple of 4 payload URLs: (full, nton, mton, firmware).
 
   Raises:
-    CommonUtilError: If payloads missing or invalid.
+    CommonUtilError: If full payload is missing or invalid.
   """
   full_payload_url = None
   mton_payload_url = None
   nton_payload_url = None
+  firmware_payload_url = None
+
   for payload in payload_list:
     if '_full_' in payload:
       full_payload_url = '/'.join([archive_url, payload])
@@ -84,12 +86,15 @@
         nton_payload_url = '/'.join([archive_url, payload])
       else:
         mton_payload_url = '/'.join([archive_url, payload])
+    elif build_artifact.FIRMWARE_ARCHIVE in payload:
+        firmware_payload_url = '/'.join([archive_url, payload])
 
   if not full_payload_url:
     raise CommonUtilError(
         'Full payload is missing or has unexpected name format.', payload_list)
 
-  return full_payload_url, nton_payload_url, mton_payload_url
+  return (full_payload_url, nton_payload_url,
+          mton_payload_url, firmware_payload_url)
 
 
 def IsAvailable(pattern_list, uploaded_list):
@@ -196,13 +201,14 @@
   # autotest tarballs (tar or tar.bz2) is available
   # (crosbug.com/32312). This dependency can be removed once all
   # branches move to the new 'tar' format.
-  to_wait_list = ['_full_', 'autotest.tar']
+  to_wait_list = ['_full_', build_artifact.AUTOTEST_PACKAGE]
   err_str = 'full payload or autotest tarball'
   uploaded_list = WaitUntilAvailable(to_wait_list, archive_url, err_str,
                                      timeout=600)
 
   # First we gather the urls/paths for the update payloads.
-  full_url, nton_url, mton_url = ParsePayloadList(archive_url, uploaded_list)
+  full_url, nton_url, mton_url, fw_url = ParsePayloadList(
+      archive_url, uploaded_list)
 
   full_payload = os.path.join(build_dir, build_artifact.ROOT_UPDATE)
 
@@ -222,6 +228,9 @@
     artifacts.append(build_artifact.AUTestPayloadBuildArtifact(
         mton_url, main_staging_dir, mton_payload))
 
+  if fw_url:
+      artifacts.append(build_artifact.BuildArtifact(
+              fw_url, main_staging_dir, build_dir))
 
   # Gather information about autotest tarballs. Use autotest.tar if available.
   if build_artifact.AUTOTEST_PACKAGE in uploaded_list: