blob: 97ed4b5d1ae4e1330bf393734874c04466cd2dbe [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tool to download keys needed to sign the official Mojo Shell APK build.
"""
import argparse
import os
import subprocess
import sys
import mopy.gn as gn
from mopy.config import Config
from mopy.paths import Paths
# Google Storage path of the official keystore to download.
_KEYSTORE_PATH = "gs://mojo/android/keys/mojo_shell-official.keystore"
_KEYSTORE_PWD_PATH = "gs://mojo/android/keys/mojo_shell-official.pwd"
def _get_gsutil_exe():
"""Get the path to gsutil executable."""
config = Config(target_os=Config.OS_ANDROID, is_debug=False,
is_official_build=True)
paths = Paths(config)
sys.path.insert(0, os.path.join(paths.src_root, "tools"))
# pylint: disable=F0401
import find_depot_tools
depot_tools_path = find_depot_tools.add_depot_tools_to_path()
gsutil_exe = os.path.join(depot_tools_path, "third_party", "gsutil",
"gsutil")
return gsutil_exe
def _download_keystore(args):
"""Downloads the keystore file on local disk."""
directory_path = args.output[0]
if args.verbose:
print "Downloading " + _KEYSTORE_PATH + " to " + directory_path
gsutil_exe = _get_gsutil_exe()
if args.dry_run:
print str([gsutil_exe, "cp", _KEYSTORE_PATH, directory_path])
else:
subprocess.check_call([gsutil_exe, "cp", _KEYSTORE_PATH, directory_path])
def _output_password(args):
"""Outputs the keystore password on the standard output."""
# The build system cannot read a file that is generated by a script and
# use its content as a variable. It can either 1/ read a file already there
# or 2/ put a script output in a variable. Hence the fact that we do not
# download the password to a file, but output it on the standard output.
gsutil_exe = _get_gsutil_exe()
if args.dry_run:
print str([gsutil_exe, "cat", _KEYSTORE_PWD_PATH])
else:
subprocess.check_call([gsutil_exe, "cat", _KEYSTORE_PWD_PATH],
stdout=sys.stdout)
def main():
parser = argparse.ArgumentParser(
description="Downloads the keystore used to sign official APK builds.")
parser.add_argument("-n", "--dry_run", help="Dry run, do not actually "+
"download", action="store_true")
parser.add_argument("-v", "--verbose", help="Verbose mode",
action="store_true")
subparsers = parser.add_subparsers()
keystore_file_parser = subparsers.add_parser(
"keystore_file", help="Downloads the keystore file")
keystore_file_parser.add_argument("output", nargs=1, type=str,
help="Output path to save the keystore to")
keystore_file_parser.set_defaults(func=_download_keystore)
keystore_pwd_parser = subparsers.add_parser(
"keystore_password", help="Outputs the keystore password")
keystore_pwd_parser.set_defaults(func=_output_password)
args = parser.parse_args()
args.func(args)
return 0
if __name__ == "__main__":
sys.exit(main())