scripts: Upload compressed chrome staging artifacts
Allow developers/testers to update chrome in dev mode w/ rootfs
verification disabled by fetching staging artifacts which can
be easily rsync'ed into the chrome rootfs path.
This allows users without a chrome SDK to achieve similar behaviors as
that of deploy chrome on the DUT itself by fetching artifacts of chrome
staging from the DUT.
How to deploy (fetch) chrome on the DUT:
[Have developer]
1. In a chromium checkout:
$> deploy_chrome --build-dir=out_${SDK_BOARD}/Release
--staging-only
--staging-upload=gs://path/to/bucket/foobar/
--public-read
[Have developer/tester]
2. On the DUT run:
$> (WORKDIR=/mnt/stateful_partition/easy-chrome; rm -rf "${WORKDIR}";
mkdir -p "${WORKDIR}"; curl --progress-bar
https://storage.googleapis.com/path/to/bucket/foobar/chrome.tar.zst
| tar --zstd -xvf -; rsync -r "${WORKDIR}" /opt/google/chrome)
BUG=none
TEST=instructions above
TEST=./run_tests
Change-Id: I75eb53947e1450f7d6d5bea686fe51a5747f7c45
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3655113
Commit-Queue: Jae Hoon Kim <kimjae@chromium.org>
Tested-by: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/deploy_chrome_unittest.py b/scripts/deploy_chrome_unittest.py
index 458dc28..3cc8c84 100644
--- a/scripts/deploy_chrome_unittest.py
+++ b/scripts/deploy_chrome_unittest.py
@@ -13,6 +13,7 @@
from chromite.lib import chrome_util
from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
+from chromite.lib import gs
from chromite.lib import osutils
from chromite.lib import parallel_unittest
from chromite.lib import partial_mock
@@ -320,6 +321,9 @@
def setUp(self):
self.staging_dir = os.path.join(self.tempdir, 'staging')
+ osutils.SafeMakedirs(self.staging_dir)
+ self.staging_tarball_path = os.path.join(
+ self.tempdir, deploy_chrome._CHROME_DIR_STAGING_TARBALL_ZSTD)
self.build_dir = os.path.join(self.tempdir, 'build_dir')
self.common_flags = ['--board', _TARGET_BOARD,
'--build-dir', self.build_dir, '--staging-only',
@@ -351,6 +355,33 @@
deploy_chrome._PrepareStagingDir(options, self.tempdir, self.staging_dir,
chrome_util._COPY_PATHS_CHROME)
+ @cros_test_lib.pytestmark_network_test
+ def testUploadStagingDir(self):
+ """Upload staging directory."""
+ mockGsCopy = self.PatchObject(gs.GSContext, 'Copy')
+ staging_upload = 'gs://some-path'
+ options = _ParseCommandLine(
+ self.common_flags + ['--staging-upload', staging_upload])
+ osutils.Touch(os.path.join(self.build_dir, 'chrome'), makedirs=True)
+ deploy_chrome._UploadStagingDir(options, self.tempdir, self.staging_dir)
+ self.assertEqual(mockGsCopy.call_args_list, [
+ mock.call(self.staging_tarball_path, staging_upload, acl=''),
+ ])
+
+ @cros_test_lib.pytestmark_network_test
+ def testUploadStagingPublicReadACL(self):
+ """Upload staging directory with public-read ACL."""
+ mockGsCopy = self.PatchObject(gs.GSContext, 'Copy')
+ staging_upload = 'gs://some-path'
+ options = _ParseCommandLine(
+ self.common_flags +
+ ['--staging-upload', staging_upload, '--public-read'])
+ osutils.Touch(os.path.join(self.build_dir, 'chrome'), makedirs=True)
+ deploy_chrome._UploadStagingDir(options, self.tempdir, self.staging_dir)
+ self.assertEqual(mockGsCopy.call_args_list, [
+ mock.call(self.staging_tarball_path, staging_upload, acl='public-read'),
+ ])
+
class DeployTestBuildDir(cros_test_lib.MockTempDirTestCase):
"""Set up a deploy object with a build-dir for use in deployment type tests"""