Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 #!/usr/bin/env python | |
| 2 | |
| 3 # Copyright 2014 The Chromium Authors. All rights reserved. | |
| 4 # Use of this source code is governed by a BSD-style license that can be | |
| 5 # found in the LICENSE file. | |
| 6 | |
| 7 '''Publishes ChromeVox to the webstore. | |
| 8 Given an unpacked extension, compresses and sends to the Chrome webstore. | |
| 9 | |
| 10 Releasing to the webstore should involve the following manual steps before | |
| 11 running this script: | |
| 12 1. clean the output directory. | |
| 13 2. make a release build. | |
| 14 3. run manual smoke tests. | |
| 15 4. run automated ChromeVox tests. | |
| 16 ''' | |
| 17 | |
| 18 import json | |
| 19 import optparse | |
| 20 import os | |
| 21 import sys | |
| 22 import tempfile | |
| 23 from zipfile import ZipFile | |
| 24 | |
| 25 # A list of files to exclude from the webstore build. | |
| 26 EXCLUDE_FILES = ['manifest_guest.json'] | |
| 27 | |
| 28 | |
| 29 def CreateOptionParser(): | |
| 30 parser = optparse.OptionParser(description=__doc__) | |
| 31 parser.usage = '%prog <extension_path> <output_path>' | |
| 32 return parser | |
| 33 | |
| 34 def MakeManifestEdits(root, old): | |
| 35 '''Customize a manifest for the webstore. | |
| 36 | |
| 37 Args: | |
| 38 root: The directory containing file. | |
| 39 | |
| 40 old: A json file. | |
| 41 | |
| 42 Returns: | |
| 43 File of the new manifest. | |
| 44 ''' | |
| 45 new_file = tempfile.NamedTemporaryFile() | |
| 46 new = new_file.name | |
| 47 with open(os.path.join(root, old)) as old_file: | |
| 48 new_contents = json.loads(old_file.read()) | |
| 49 new_contents.pop('key', '') | |
| 50 new_file.write(json.dumps(new_contents)) | |
| 51 return new_file | |
| 52 | |
| 53 def main(): | |
| 54 _, args = CreateOptionParser().parse_args() | |
| 55 if len(args) != 2: | |
| 56 print 'Expected exactly two arguments' | |
| 57 sys.exit(1) | |
| 58 | |
| 59 extension_path = args[0] | |
| 60 output_path = args[1] | |
| 61 | |
| 62 with ZipFile(output_path, 'w') as zip: | |
| 63 for root, dirs, files in os.walk(extension_path): | |
| 64 rel_path = os.path.join(os.path.relpath(root, extension_path), '') | |
| 65 | |
| 66 for file in files: | |
| 67 extension_file = file | |
| 68 if file in EXCLUDE_FILES: | |
| 69 continue | |
| 70 if file == 'manifest.json': | |
| 71 extension_file = file | |
| 72 new_file = MakeManifestEdits(root, file) | |
| 73 zip.write( | |
| 74 new_file.name, os.path.join(rel_path, extension_file)) | |
| 75 continue | |
| 76 | |
| 77 zip.write( | |
| 78 os.path.join(root, file), os.path.join(rel_path, extension_file)) | |
| 79 # TODO(dtseng): Publish to webstore | |
|
dmazzoni
2014/07/28 05:29:07
Is this TODO still valid? Your comment on the code
David Tseng
2014/07/29 23:52:18
Done.
| |
| 80 | |
| 81 if __name__ == '__main__': | |
| 82 main() | |
| OLD | NEW |