Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/tools/webstore.py

Issue 417703002: Add scripts to semi-automate publishing of ChromeVox webstore extension using webstore API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/env python
dmazzoni 2014/07/23 18:52:41 Maybe call this upload_to_webstore or something al
David Tseng 2014/07/23 22:45:31 I didn't specialize it because it will also contai
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 an extension to the webstore.
dmazzoni 2014/07/23 18:52:41 Is this "an extension" or is it just ChromeVox?
David Tseng 2014/07/23 22:45:31 Done.
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 from zipfile import ZipFile
23
24 # A list of files to exclude from the webstore build.
25 EXCLUDE_FILES = ['manifest_guest.json']
26
27
28 def CreateOptionParser():
29 parser = optparse.OptionParser(description=__doc__)
30 parser.usage = '%prog <extension_path> <output_path>'
31 return parser
32
33 def MakeManifestEdits(root, old):
34 '''Customize a manifest for the webstore.
35
36 Args:
37 root: The directory containing file.
38
39 old: A json file.
40
41 Returns:
42 Path of the new json manifest.
43 '''
44 new = os.path.join('/tmp', old)
dmazzoni 2014/07/23 18:52:41 Use a tmpfile api to get a temporary file that won
David Tseng 2014/07/23 22:45:31 Done.
45 with open(os.path.join(root, old)) as old_file, open(new, 'w') as new_file:
46 new_contents = json.loads(old_file.read())
47 new_contents.pop('key', '')
48 new_file.write(json.dumps(new_contents))
49 return new
50
51 def main():
52 _, args = CreateOptionParser().parse_args()
53 if len(args) != 2:
54 print 'Expected exactly two arguments'
55 sys.exit(1)
56
57 extension_path = args[0]
58 output_path = args[1]
59
60 with ZipFile(output_path, 'w') as zip:
61 for root, dirs, files in os.walk(extension_path):
62 rel_path = os.path.join(os.path.relpath(root, extension_path), '')
63
64 for file in files:
65 extension_file = file
66 if file in EXCLUDE_FILES:
67 continue
68 if file == 'manifest.json':
69 extension_file = file
70 file = MakeManifestEdits(root, file)
71
72 zip.write(
73 os.path.join(root, file), os.path.join(rel_path, extension_file))
74 # TODO(dtseng): Publish to webstore
75
76 if __name__ == '__main__':
77 main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698