Chromium Code Reviews| Index: chrome/browser/resources/chromeos/chromevox/tools/upload_chromevox_to_webstore.py |
| diff --git a/chrome/browser/resources/chromeos/chromevox/tools/upload_chromevox_to_webstore.py b/chrome/browser/resources/chromeos/chromevox/tools/upload_chromevox_to_webstore.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..eb047f8a48e9de1a5b5975fa690bc65adae44460 |
| --- /dev/null |
| +++ b/chrome/browser/resources/chromeos/chromevox/tools/upload_chromevox_to_webstore.py |
| @@ -0,0 +1,108 @@ |
| +#!/usr/bin/env python |
| + |
| +# Copyright 2014 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. |
| + |
| +'''Publishes ChromeVox to the webstore. |
| + Given an unpacked extension, compresses and sends to the Chrome webstore. |
| + |
| + Releasing to the webstore should involve the following manual steps before |
| + running this script: |
| + 1. clean the output directory. |
| + 2. make a release build. |
| + 3. run manual smoke tests. |
| + 4. run automated ChromeVox tests. |
| +''' |
| + |
| +import chromevox_webstore_util |
| +import json |
| +import optparse |
| +import os |
| +import sys |
| +import tempfile |
| +from zipfile import ZipFile |
| + |
| +# A list of files to exclude from the webstore build. |
| +EXCLUDE_FILES = ['manifest_guest.json'] |
| + |
| + |
| +def CreateOptionParser(): |
| + parser = optparse.OptionParser(description=__doc__) |
| + parser.usage = '%prog <extension_path> <output_path> <client_secret' |
| + return parser |
| + |
| +def MakeManifestEdits(root, old): |
| + '''Customize a manifest for the webstore. |
| + |
| + Args: |
| + root: The directory containing file. |
| + |
| + old: A json file. |
| + |
| + Returns: |
| + File of the new manifest. |
| + ''' |
| + new_file = tempfile.NamedTemporaryFile() |
| + new = new_file.name |
| + with open(os.path.join(root, old)) as old_file: |
| + new_contents = json.loads(old_file.read()) |
| + new_contents.pop('key', '') |
| + new_file.write(json.dumps(new_contents)) |
| + return new_file |
| + |
| +def RunInteractivePrompt(client_secret, output_path): |
| + input = '' |
| + while True: |
| + print 'u upload' |
| + print 'g get upload status' |
| + print 't publish trusted tester' |
| + print 'p publish public' |
| + print 'q quit' |
| + input = raw_input('Please select an option: ') |
| + input = input.strip() |
| + if input == 'g': |
| + chromevox_webstore_util.GetUploadStatus(client_secret) |
| + elif input == 'u': |
| + chromevox_webstore_util.PostUpload(output_path, client_secret) |
| + elif input == 't': |
| + chromevox_webstore_util.PostPublishTrustedTesters(client_secret) |
| + elif input == 'p': |
| + chromevox_webstore_util.PostPublish(client_secret) |
| + elif input == 'q': |
| + sys.exit() |
| + else: |
| + print 'Unrecognized option: %s' % input |
| + |
| +def main(): |
| + _, args = CreateOptionParser().parse_args() |
| + if len(args) != 3: |
| + print 'Expected exactly three arguments' |
| + sys.exit(1) |
| + |
| + extension_path = args[0] |
| + output_path = args[1] |
| + client_secret = args[2] |
| + |
| + with ZipFile(output_path, 'w') as zip: |
| + for root, dirs, files in os.walk(extension_path): |
| + rel_path = os.path.join(os.path.relpath(root, extension_path), '') |
| + |
| + for file in files: |
|
dmazzoni
2014/07/30 05:39:55
file is a reserved word in python, please use some
David Tseng
2014/07/31 21:52:57
Ah yes; changed.
|
| + extension_file = file |
| + if file in EXCLUDE_FILES: |
| + continue |
| + if file == 'manifest.json': |
| + extension_file = file |
| + new_file = MakeManifestEdits(root, file) |
| + zip.write( |
| + new_file.name, os.path.join(rel_path, extension_file)) |
| + continue |
| + |
| + zip.write( |
| + os.path.join(root, file), os.path.join(rel_path, extension_file)) |
| + RunInteractivePrompt(client_secret, output_path) |
|
dmazzoni
2014/07/30 05:39:55
I don't think this is indented correctly - it will
David Tseng
2014/07/31 21:52:57
Yup; you're right. I haven't really tested this ex
|
| + |
| + |
| +if __name__ == '__main__': |
| + main() |