blob: 8d106cdc68a5423a840a86ee4cc7a80894b2dbc8 [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.
"""Upload mojom_parser to Google Cloud Storage based on SHA1 digest.
This script is used to upload a new version of the mojom_parser binary to
Google Cloud Storage. It operates in three steps:
i) Computes the sha1 digest of the binary file.
ii) Uploads the file to Google Cloud Storage using the sha1 as the file name.
iii) Updates a local file named "mojom_parser.sha1" to contain the sha1
digest of the file that was uploaded. This allows "gclient sync" to download
the file.
In order to use this script, you need:
- depot_tools in your path
- WRITE access to the bucket at
https://console.developers.google.com/storage/browser/mojo/mojom_parser/.
To upload a new version of mojom_parser do the following:
1) Build a new version: ninja -C out/Release mojom/mojom_parser.
This creates a binary in out/Release called "moparse".
2) If necessary, run 'gsutil.py config' to update gsutil's credentials
3) Run this script: python mojom/mojom_parser/tools/upload_binary.py
4) Land a CL with the updated version of mojom_parser.sha1 that this
script has modified. (Do not check-in the binary "mojom_parser" itself into
source control.)
"""
import argparse
import os
import shutil
import subprocess
import sys
# We assume this script is located in <src>/mojom/mojom_parser/tools
TOOLS_DIR = os.path.abspath(os.path.dirname(__file__))
MOJOM_PARSER_DIR = os.path.abspath(os.path.join(TOOLS_DIR, os.pardir))
LINUX64_BIN_DIR = os.path.abspath(os.path.join(MOJOM_PARSER_DIR,
'bin', 'linux64'))
SRC_DIR = os.path.abspath(os.path.join(MOJOM_PARSER_DIR, os.pardir, os.pardir))
TOOLS_DIR = os.path.abspath(os.path.join(SRC_DIR, "tools"))
sys.path.insert(0, TOOLS_DIR)
import find_depot_tools
DEPOT_TOOLS_PATH = find_depot_tools.add_depot_tools_to_path()
def Upload(path_to_binary):
"""Computes the sha1 digest of the contents of the file at |path_to_binary|,
then uploads the contents of the file at that path to the Google Cloud
Storage bucket "mojo/mojom_parser", using the sha1 as the filename.
A file named <path_to_binary>.sha1 is created containing the sha1."""
# We invoke upload_to_google.storage.py from depot_tools.
upload_script = os.path.abspath(os.path.join(DEPOT_TOOLS_PATH,
"upload_to_google_storage.py"))
upload_cmd = ['python', upload_script, path_to_binary,
'-b', 'mojo/mojom_parser']
print "Uploading mojom_parser to GCS..."
subprocess.check_call(upload_cmd)
def UploadAndStamp(path_to_binary):
"""Computes the sha1 digest of the contents of the file at |path_to_binary|,
then uploads the contents of the file at that path to the Google Cloud
Storage bucket "mojo/mojom_parser", using the sha1 as the filename, then
updates the contents of the file at <LINUX64_BIN_DIR>/mojom_parser.sha1
to contain the sha1."""
Upload(path_to_binary)
# Copy the generated sha1 file to the stamp_file location.
sha1_file = "%s.sha1" % path_to_binary
stamp_file = os.path.join(LINUX64_BIN_DIR, 'mojom_parser.sha1')
shutil.copy(sha1_file, stamp_file)
print "Wrote stamp file %s. You probably want to commit this." % stamp_file
def main():
default_path_to_binary = os.path.abspath(os.path.join(SRC_DIR,
'out','Release', 'moparse'))
parser = argparse.ArgumentParser(description="Upload the mojom_parser "
"binary to Google Cloud Storage and update mojom_parser.sha1.")
parser.add_argument("--path-to-binary", action="store",
default=default_path_to_binary,
help="Path to the binary to upload. If not specified "
"'out/Release/moparse' is used.")
args = parser.parse_args()
try:
UploadAndStamp(args.path_to_binary)
except Exception as e:
print e
return 1
return 0
if __name__ == '__main__':
sys.exit(main())