#!/usr/bin/env python # Copyright 2018 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. """Update the Google Cloud Storage bucket hosting the Super Size UI.""" import argparse import os import subprocess import uuid GS_BUCKET = 'gs://chrome-supersize' def _SyncStatic(): """Upload static files from the static directory.""" static_files = os.path.join(os.path.dirname(__file__), 'static') subprocess.check_call([ 'gsutil.py', '-m', 'rsync', '-r', static_files, GS_BUCKET ]) def _SyncTemplates(): """Generate and upload the templates/sw.js file.""" template_file = os.path.join(os.path.dirname(__file__), 'templates', 'sw.js') cache_hash = uuid.uuid4().hex p = subprocess.Popen([ 'gsutil.py', 'cp', '-p', '-', '%s/sw.js' % GS_BUCKET ], stdin=subprocess.PIPE) with open(template_file, 'r') as in_file: p.communicate(in_file.read().replace('{{cache_hash}}', cache_hash)) def _SetMetaAndPermissions(): # sw.js has the wrong type due to being created from a stream subprocess.check_call([ 'gsutil.py', 'setmeta', '-h', 'Content-Type:application/javascript', '%s/sw.js' % GS_BUCKET ]) # All files in the root of the bucket are user readable subprocess.check_call([ 'gsutil.py', '-m', 'acl', 'ch', '-u', 'AllUsers:R', '%s/*' % GS_BUCKET ]) def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--sync', action='store_true', required=True, help='Sync static and template files to GCS.') args = parser.parse_args() if args.sync: _SyncStatic() _SyncTemplates() _SetMetaAndPermissions() if __name__ == '__main__': main()