cbuildbot: copy DLC images from local host to release gs bucket

This CL copies DLC images in Archive stage in steps below:
1. Copies dlc folder (contains all DLC images) from
src/build/images/eve-arcnext/ to
trybot_archive/eve-arcnext-release/.
2. Pushes dlc folder from trybot_archive/eve-arcnext-release/ to
gs://chromeos-image-archive/eve-arcnext-release/.
3. Pushes dlc folder from gs://chromeos-image-archive/eve-arcnext-release/ to
gs://chromeos-releases/dev-channel/eve-arcnext.

After this CL, 'dlc' folder (contains all DLC images) is present at
gs://chromeos-releases/dev-channel/eve-arcnext as inputs to PaygenBuild stage to
generate payloads and save them in place.

BUG=chromium:926045
TEST=unittest, tryjob

Change-Id: Iff7f196992354290540d66c49f41d35b9cc843b6
Reviewed-on: https://chromium-review.googlesource.com/1515434
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Xiaochu Liu <xiaochu@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
diff --git a/scripts/pushimage.py b/scripts/pushimage.py
index 26e8d89..a0aec2b 100644
--- a/scripts/pushimage.py
+++ b/scripts/pushimage.py
@@ -414,8 +414,9 @@
         ('image.zip', _ImageNameBase(), 'zip'),
         (constants.TEST_IMAGE_TAR, test_basename, 'tar.xz'),
         ('debug.tgz', 'debug-%s' % boardpath, 'tgz'),
-        (hwqual_tarball, '', ''),
-        ('stateful.tgz', '', ''),
+        (hwqual_tarball, None, None),
+        ('stateful.tgz', None, None),
+        ('dlc', None, None),
     )
 
     # The following build artifacts, if present, are always copied.
@@ -450,15 +451,16 @@
          constants.IMAGE_TYPE_BASE),
     )
 
-    def _CopyFileToGS(src, dst, suffix):
+    def _CopyFileToGS(src, dst=None, suffix=None):
       """Returns |dst| file name if the copying was successful."""
-      if not dst:
+      if dst is None:
         dst = src
-      elif suffix:
+      elif suffix is not None:
         dst = '%s.%s' % (dst, suffix)
       success = False
       try:
-        ctx.Copy(os.path.join(src_path, src), os.path.join(dst_path, dst))
+        ctx.Copy(os.path.join(src_path, src), os.path.join(dst_path, dst),
+                 recursive=True)
         success = True
       except gs.GSNoSuchKey:
         logging.warning('Skipping %s as it does not exist', src)