Zip CT chromium build before storing in GS and unzip when downloading

Bug: skia:7043
Change-Id: If03a99b0351b726bdfa4aea827b543a325ef678d
Reviewed-on: https://skia-review.googlesource.com/49120
Commit-Queue: Ravi Mistry <rmistry@google.com>
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
diff --git a/ct/go/util/chromium_builds.go b/ct/go/util/chromium_builds.go
index 7707264..2d4e3c8 100644
--- a/ct/go/util/chromium_builds.go
+++ b/ct/go/util/chromium_builds.go
@@ -124,7 +124,7 @@
 		return "", "", fmt.Errorf("Could not create GCS object: %s", err)
 	}
 	if err := uploadChromiumBuild(filepath.Join(chromiumBuildDir, "src", "out", "Release"), filepath.Join(CHROMIUM_BUILDS_DIR_NAME, googleStorageDirName), targetPlatform, gs); err != nil {
-		return "", "", fmt.Errorf("There was an error uploaded the chromium build dir %s: %s", filepath.Join(chromiumBuildDir, "src", "out", "Release"), err)
+		return "", "", fmt.Errorf("There was an error uploading the chromium build dir %s: %s", filepath.Join(chromiumBuildDir, "src", "out", "Release"), err)
 	}
 
 	// Create and upload another chromium build if the uploadSingleBuild flag is false. This build
@@ -197,7 +197,13 @@
 		}
 		defer util.Rename(objTmpDir, objDir)
 	}
-	return gs.UploadDir(localUploadDir, gsDir, true)
+
+	zipFilePath := filepath.Join(ChromiumBuildsDir, CHROMIUM_BUILD_ZIP_NAME)
+	defer util.Remove(zipFilePath)
+	if err := util.ZipIt(zipFilePath, localUploadDir); err != nil {
+		return fmt.Errorf("Error when zipping %s to %s: %s", localUploadDir, zipFilePath, err)
+	}
+	return gs.UploadFile(CHROMIUM_BUILD_ZIP_NAME, ChromiumBuildsDir, gsDir)
 }
 
 func buildChromium(chromiumDir, targetPlatform string, useWhitelistedFonts bool) error {
diff --git a/ct/go/util/constants.go b/ct/go/util/constants.go
index 8b4ec58..f867140 100644
--- a/ct/go/util/constants.go
+++ b/ct/go/util/constants.go
@@ -30,6 +30,7 @@
 	CHROMIUM_PERF_TASKS_DIR_NAME     = "chromium_perf_runs"
 	CHROMIUM_ANALYSIS_TASKS_DIR_NAME = "chromium_analysis_runs"
 	FIX_ARCHIVE_TASKS_DIR_NAME       = "fix_archive_runs"
+	CHROMIUM_BUILD_ZIP_NAME          = "chromium_build.zip"
 
 	// Limit the number of times CT tries to get a remote file before giving up.
 	MAX_URI_GET_TRIES = 4
diff --git a/ct/go/util/gs.go b/ct/go/util/gs.go
index 40f710f..ad2ac60 100644
--- a/ct/go/util/gs.go
+++ b/ct/go/util/gs.go
@@ -208,6 +208,13 @@
 	if err := gs.downloadRemoteDir(localDir, gsDir); err != nil {
 		return fmt.Errorf("Error downloading %s into %s: %s", gsDir, localDir, err)
 	}
+
+	// Unzip the build.
+	zipFilePath := filepath.Join(localDir, CHROMIUM_BUILD_ZIP_NAME)
+	if err := util.UnZip(localDir, zipFilePath); err != nil {
+		return fmt.Errorf("Error when unzipping %s: %s", zipFilePath, err)
+	}
+
 	// Downloaded chrome binary needs to be set as an executable.
 	util.LogErr(os.Chmod(filepath.Join(localDir, "chrome"), 0777))