OLD | NEW |
1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
4 | 4 |
5 import argparse | 5 import argparse |
6 import logging | 6 import logging |
7 import os | 7 import os |
8 import re | 8 import re |
9 import shutil | 9 import shutil |
10 import subprocess | 10 import subprocess |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 '-b', '--build-num', dest='build_num', | 129 '-b', '--build-num', dest='build_num', |
130 help='Use given build number (if omitted the build number will ' | 130 help='Use given build number (if omitted the build number will ' |
131 'be retrieved from Mercurial)'), | 131 'be retrieved from Mercurial)'), |
132 make_argument( | 132 make_argument( |
133 '-k', '--key', dest='key_file', | 133 '-k', '--key', dest='key_file', |
134 help='File containing private key and certificates required to ' | 134 help='File containing private key and certificates required to ' |
135 'sign the package'), | 135 'sign the package'), |
136 make_argument( | 136 make_argument( |
137 '-r', '--release', action='store_true', | 137 '-r', '--release', action='store_true', |
138 help='Create a release build'), | 138 help='Create a release build'), |
139 make_argument('output_file', nargs='?') | 139 make_argument('output_file', nargs='?'), |
140 ) | 140 ), |
141 ) | 141 ) |
142 def build(base_dir, build_num, key_file, release, output_file, platform, | 142 def build(base_dir, build_num, key_file, release, output_file, platform, |
143 **kwargs): | 143 **kwargs): |
144 """ | 144 """ |
145 Create a build. | 145 Create a build. |
146 | 146 |
147 Creates an extension build with given file name. If output_file is missing | 147 Creates an extension build with given file name. If output_file is missing |
148 a default name will be chosen. | 148 a default name will be chosen. |
149 """ | 149 """ |
150 kwargs = {} | 150 kwargs = {} |
151 if platform == 'edge': | 151 if platform == 'edge': |
152 import buildtools.packagerEdge as packager | 152 import buildtools.packagerEdge as packager |
153 else: | 153 else: |
154 import buildtools.packagerChrome as packager | 154 import buildtools.packagerChrome as packager |
155 | 155 |
156 kwargs['keyFile'] = key_file | 156 kwargs['keyFile'] = key_file |
157 kwargs['outFile'] = output_file | 157 kwargs['outFile'] = output_file |
158 kwargs['releaseBuild'] = release | 158 kwargs['releaseBuild'] = release |
159 kwargs['buildNum'] = build_num | 159 kwargs['buildNum'] = build_num |
160 | 160 |
161 packager.createBuild(base_dir, type=platform, **kwargs) | 161 packager.createBuild(base_dir, type=platform, **kwargs) |
162 | 162 |
163 | 163 |
164 @argparse_command( | 164 @argparse_command( |
165 valid_platforms={'chrome', 'gecko', 'edge'} | 165 valid_platforms={'chrome', 'gecko', 'edge'}, |
166 ) | 166 ) |
167 def devenv(base_dir, platform, **kwargs): | 167 def devenv(base_dir, platform, **kwargs): |
168 """ | 168 """ |
169 Set up a development environment. | 169 Set up a development environment. |
170 | 170 |
171 Will set up or update the devenv folder as an unpacked extension folder ' | 171 Will set up or update the devenv folder as an unpacked extension folder ' |
172 for development. | 172 for development. |
173 """ | 173 """ |
174 if platform == 'edge': | 174 if platform == 'edge': |
175 import buildtools.packagerEdge as packager | 175 import buildtools.packagerEdge as packager |
176 else: | 176 else: |
177 import buildtools.packagerChrome as packager | 177 import buildtools.packagerChrome as packager |
178 | 178 |
179 file = StringIO() | 179 file = StringIO() |
180 packager.createBuild(base_dir, type=platform, outFile=file, devenv=True, | 180 packager.createBuild(base_dir, type=platform, outFile=file, devenv=True, |
181 releaseBuild=True) | 181 releaseBuild=True) |
182 | 182 |
183 from buildtools.packager import getDevEnvPath | 183 from buildtools.packager import getDevEnvPath |
184 devenv_dir = getDevEnvPath(base_dir, platform) | 184 devenv_dir = getDevEnvPath(base_dir, platform) |
185 | 185 |
186 shutil.rmtree(devenv_dir, ignore_errors=True) | 186 shutil.rmtree(devenv_dir, ignore_errors=True) |
187 | 187 |
188 file.seek(0) | 188 file.seek(0) |
189 with ZipFile(file, 'r') as zip_file: | 189 with ZipFile(file, 'r') as zip_file: |
190 zip_file.extractall(devenv_dir) | 190 zip_file.extractall(devenv_dir) |
191 | 191 |
192 | 192 |
193 project_key_argument = make_argument( | 193 project_key_argument = make_argument( |
194 'project_key', help='The crowdin project key.' | 194 'project_key', help='The crowdin project key.', |
195 ) | 195 ) |
196 | 196 |
197 | 197 |
198 @argparse_command( | 198 @argparse_command( |
199 arguments=(project_key_argument, ) | 199 arguments=(project_key_argument, ), |
200 ) | 200 ) |
201 def setuptrans(base_dir, project_key, platform, **kwargs): | 201 def setuptrans(base_dir, project_key, platform, **kwargs): |
202 """ | 202 """ |
203 Set up translation languages. | 203 Set up translation languages. |
204 | 204 |
205 Set up translation languages for the project on crowdin.com. | 205 Set up translation languages for the project on crowdin.com. |
206 """ | 206 """ |
207 from buildtools.packager import readMetadata | 207 from buildtools.packager import readMetadata |
208 metadata = readMetadata(base_dir, platform) | 208 metadata = readMetadata(base_dir, platform) |
209 | 209 |
210 basename = metadata.get('general', 'basename') | 210 basename = metadata.get('general', 'basename') |
211 locale_config = read_locale_config(base_dir, platform, metadata) | 211 locale_config = read_locale_config(base_dir, platform, metadata) |
212 | 212 |
213 import buildtools.localeTools as localeTools | 213 import buildtools.localeTools as localeTools |
214 localeTools.setupTranslations(locale_config, basename, project_key) | 214 localeTools.setupTranslations(locale_config, basename, project_key) |
215 | 215 |
216 | 216 |
217 @argparse_command( | 217 @argparse_command( |
218 arguments=(project_key_argument, ) | 218 arguments=(project_key_argument, ), |
219 ) | 219 ) |
220 def translate(base_dir, project_key, platform, **kwargs): | 220 def translate(base_dir, project_key, platform, **kwargs): |
221 """ | 221 """ |
222 Update translation master files. | 222 Update translation master files. |
223 | 223 |
224 Update the translation master files in the project on crowdin.com. | 224 Update the translation master files in the project on crowdin.com. |
225 """ | 225 """ |
226 from buildtools.packager import readMetadata | 226 from buildtools.packager import readMetadata |
227 metadata = readMetadata(base_dir, platform) | 227 metadata = readMetadata(base_dir, platform) |
228 | 228 |
229 basename = metadata.get('general', 'basename') | 229 basename = metadata.get('general', 'basename') |
230 locale_config = read_locale_config(base_dir, platform, metadata) | 230 locale_config = read_locale_config(base_dir, platform, metadata) |
231 | 231 |
232 default_locale_dir = os.path.join(locale_config['base_path'], | 232 default_locale_dir = os.path.join(locale_config['base_path'], |
233 locale_config['default_locale']) | 233 locale_config['default_locale']) |
234 | 234 |
235 import buildtools.localeTools as localeTools | 235 import buildtools.localeTools as localeTools |
236 localeTools.updateTranslationMaster(locale_config, metadata, | 236 localeTools.updateTranslationMaster(locale_config, metadata, |
237 default_locale_dir, basename, | 237 default_locale_dir, basename, |
238 project_key) | 238 project_key) |
239 | 239 |
240 | 240 |
241 @argparse_command( | 241 @argparse_command( |
242 arguments=(project_key_argument, ) | 242 arguments=(project_key_argument, ), |
243 ) | 243 ) |
244 def uploadtrans(base_dir, project_key, platform, **kwargs): | 244 def uploadtrans(base_dir, project_key, platform, **kwargs): |
245 """ | 245 """ |
246 Upload existing translations. | 246 Upload existing translations. |
247 | 247 |
248 Upload already existing translations to the project on crowdin.com. | 248 Upload already existing translations to the project on crowdin.com. |
249 """ | 249 """ |
250 from buildtools.packager import readMetadata | 250 from buildtools.packager import readMetadata |
251 metadata = readMetadata(base_dir, platform) | 251 metadata = readMetadata(base_dir, platform) |
252 | 252 |
253 basename = metadata.get('general', 'basename') | 253 basename = metadata.get('general', 'basename') |
254 locale_config = read_locale_config(base_dir, platform, metadata) | 254 locale_config = read_locale_config(base_dir, platform, metadata) |
255 | 255 |
256 import buildtools.localeTools as localeTools | 256 import buildtools.localeTools as localeTools |
257 for locale, locale_dir in locale_config['locales'].iteritems(): | 257 for locale, locale_dir in locale_config['locales'].iteritems(): |
258 if locale != locale_config['default_locale'].replace('_', '-'): | 258 if locale != locale_config['default_locale'].replace('_', '-'): |
259 localeTools.uploadTranslations(locale_config, metadata, locale_dir, | 259 localeTools.uploadTranslations(locale_config, metadata, locale_dir, |
260 locale, basename, project_key) | 260 locale, basename, project_key) |
261 | 261 |
262 | 262 |
263 @argparse_command( | 263 @argparse_command( |
264 arguments=(project_key_argument, ) | 264 arguments=(project_key_argument, ), |
265 ) | 265 ) |
266 def gettranslations(base_dir, project_key, platform, **kwargs): | 266 def gettranslations(base_dir, project_key, platform, **kwargs): |
267 """ | 267 """ |
268 Download translation updates. | 268 Download translation updates. |
269 | 269 |
270 Download updated translations from crowdin.com. | 270 Download updated translations from crowdin.com. |
271 """ | 271 """ |
272 from buildtools.packager import readMetadata | 272 from buildtools.packager import readMetadata |
273 metadata = readMetadata(base_dir, platform) | 273 metadata = readMetadata(base_dir, platform) |
274 | 274 |
275 basename = metadata.get('general', 'basename') | 275 basename = metadata.get('general', 'basename') |
276 locale_config = read_locale_config(base_dir, platform, metadata) | 276 locale_config = read_locale_config(base_dir, platform, metadata) |
277 | 277 |
278 import buildtools.localeTools as localeTools | 278 import buildtools.localeTools as localeTools |
279 localeTools.getTranslations(locale_config, basename, project_key) | 279 localeTools.getTranslations(locale_config, basename, project_key) |
280 | 280 |
281 | 281 |
282 @argparse_command( | 282 @argparse_command( |
283 valid_platforms={'chrome'}, | 283 valid_platforms={'chrome'}, |
284 arguments=( | 284 arguments=( |
285 make_argument('target_dir'), | 285 make_argument('target_dir'), |
286 make_argument('-q', '--quiet', help='Suppress JsDoc output', | 286 make_argument('-q', '--quiet', help='Suppress JsDoc output', |
287 action='store_true', default=False), | 287 action='store_true', default=False), |
288 ) | 288 ), |
289 ) | 289 ) |
290 def docs(base_dir, target_dir, quiet, platform, **kwargs): | 290 def docs(base_dir, target_dir, quiet, platform, **kwargs): |
291 """ | 291 """ |
292 Generate documentation (requires node.js). | 292 Generate documentation (requires node.js). |
293 | 293 |
294 Generate documentation files and write them into the specified directory. | 294 Generate documentation files and write them into the specified directory. |
295 """ | 295 """ |
296 source_dir = os.path.join(base_dir, 'lib') | 296 source_dir = os.path.join(base_dir, 'lib') |
297 | 297 |
298 # JSDoc struggles wih huge objects: | 298 # JSDoc struggles wih huge objects: |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 make_argument( | 331 make_argument( |
332 '-k', '--key', dest='key_file', | 332 '-k', '--key', dest='key_file', |
333 help='File containing private key and certificates required to ' | 333 help='File containing private key and certificates required to ' |
334 'sign the release.'), | 334 'sign the release.'), |
335 make_argument( | 335 make_argument( |
336 '-d', '--downloads-repository', dest='downloads_repository', | 336 '-d', '--downloads-repository', dest='downloads_repository', |
337 help='Directory containing downloads repository (if omitted ' | 337 help='Directory containing downloads repository (if omitted ' |
338 '../downloads is assumed)'), | 338 '../downloads is assumed)'), |
339 make_argument( | 339 make_argument( |
340 'version', help='Version number of the release', | 340 'version', help='Version number of the release', |
341 type=valid_version_format) | 341 type=valid_version_format), |
342 ) | 342 ), |
343 ) | 343 ) |
344 def release(base_dir, downloads_repository, key_file, platform, version, | 344 def release(base_dir, downloads_repository, key_file, platform, version, |
345 **kwargs): | 345 **kwargs): |
346 """ | 346 """ |
347 Run release automation. | 347 Run release automation. |
348 | 348 |
349 Note: If you are not the project owner then you probably don't want to run | 349 Note: If you are not the project owner then you probably don't want to run |
350 this! | 350 this! |
351 | 351 |
352 Run release automation: create downloads for the new version, tag source | 352 Run release automation: create downloads for the new version, tag source |
(...skipping 26 matching lines...) Expand all Loading... |
379 if build_available_subcommands(base_dir): | 379 if build_available_subcommands(base_dir): |
380 MAIN_PARSER.set_defaults(base_dir=base_dir) | 380 MAIN_PARSER.set_defaults(base_dir=base_dir) |
381 | 381 |
382 # If no args are provided, this module is run directly from the command | 382 # If no args are provided, this module is run directly from the command |
383 # line. argparse will take care of consuming sys.argv. | 383 # line. argparse will take care of consuming sys.argv. |
384 arguments = MAIN_PARSER.parse_args(args if len(args) > 0 else None) | 384 arguments = MAIN_PARSER.parse_args(args if len(args) > 0 else None) |
385 | 385 |
386 function = arguments.function | 386 function = arguments.function |
387 del arguments.function | 387 del arguments.function |
388 function(**vars(arguments)) | 388 function(**vars(arguments)) |
OLD | NEW |