diff options
Diffstat (limited to 'bin/build.py')
-rwxr-xr-x | bin/build.py | 116 |
1 files changed, 35 insertions, 81 deletions
diff --git a/bin/build.py b/bin/build.py index 7400d7f..b6ec82a 100755 --- a/bin/build.py +++ b/bin/build.py @@ -50,41 +50,6 @@ from subprocess import Popen, PIPE import xml.parsers.expat from tempfile import mkstemp -MINIFY_PRODUCTS = { - 'js': { - 'js/__utm.min.js': [ - { 'file':'js/__utm.js' } - ], - 'js/jquery.addons.min.js': [ - { 'file':'js/jquery-compressed.js' }, - { 'file':'js/addons.js' } - ], - 'js/amo2009/amo2009.min.js': [ - # This list is repeated in site/app/views/layouts/amo2009.thtml - { 'file':'js/jquery-compressed.js' }, - { 'file':'js/jquery.cookie.js' }, - { 'file':'js/amo2009/global.js' }, - { 'file':'js/amo2009/slimbox2.js' }, - { 'file':'js/amo2009/addons.js' }, - { 'file':'js/amo2009/global-mozilla.js' } - ] - }, - 'css': { - 'css/style.min.css': [ - { 'file':'css/type.css' }, - { 'file':'css/color.css' }, - { 'file':'css/screen.css', 'prefix':'@media screen, projection {', 'suffix':'}' }, - { 'file':'css/print.css', 'prefix':'@media print {', 'suffix':'}' }, - ], - 'css/amo2009/style.min.css': [ - { 'file':'css/amo2009/main.css' }, - { 'file':'css/amo2009/slimbox2.css' }, - { 'file':'css/amo2009/main-mozilla.css' }, - { 'file':'css/amo2009/legacy.css' } - ] - } -} - # contants REVISIONS_PHP_TEMPLATE = """\ <?php @@ -153,19 +118,13 @@ class Minifier(object): destName = tempfile[1] try: for source in sourceNames: - - # source expected to be either a plain string, or a - # dict describing filename / prefix / suffix - prefix = suffix = '' - if type(source) != dict: - sourceFileName = source - else: + try: + prefix = source['prefix'] sourceFileName = source['file'] - if source.has_key('prefix'): - prefix = source['prefix'] - if source.has_key('suffix'): - suffix = source['suffix'] - + suffix = source['suffix'] + except TypeError: + prefix = suffix = '' + sourceFileName = source sourceFile = open(sourceFileName) try: destinationFile.write(prefix) @@ -207,20 +166,20 @@ def updateRevisions(): tree_rev = rp.getLatestRevision('https://svn.mozilla.org/addons/trunk/') print "Latest Tree Revision:", tree_rev - repo = 'https://svn.mozilla.org/addons/trunk/site/app/webroot/' - revs = {} - for rev_type in ('js', 'css'): - files = [] - for fn, parts in MINIFY_PRODUCTS[rev_type].iteritems(): - for part in parts: - files.append((type(part) == dict) and part['file'] or part) - revs[rev_type] = rp.getMaxRevision([ repo + file for file in files ]) - print "%s Revision: %s" % (rev_type, revs[rev_type]) + css_repo = 'https://svn.mozilla.org/addons/trunk/site/app/webroot/css/' + css_files = ['color.css', 'screen.css', 'type.css', 'print.css'] + css_rev = rp.getMaxRevision([ css_repo + css_file for css_file in css_files ]) + print "CSS Revision:", css_rev + + js_repo = 'https://svn.mozilla.org/addons/trunk/site/app/webroot/js/' + js_files = ['jquery-compressed.js', 'addons.js'] + js_rev = rp.getMaxRevision([ js_repo + js_file for js_file in js_files ]) + print "JS Revision:", js_rev revs_file = os.path.join(script_dir, '..', 'site', 'app', 'config', 'revisions.php') try: rf = open(revs_file, 'w') - rf.write(REVISIONS_PHP_TEMPLATE % (tree_rev, revs['css'], revs['js'])) + rf.write(REVISIONS_PHP_TEMPLATE % (tree_rev, css_rev, js_rev)) rf.close() except IOError, e: print "Error writing revision.php file:", e @@ -231,31 +190,26 @@ def concatAndMinify(): minifier = Minifier() webroot = os.path.join(script_dir, '..', 'site', 'app', 'webroot') + + print 'Concatenating JS' + js_files = ['jquery-compressed.js', 'addons.js'] + js_concatenated = minifier.concatFiles(sourceNames=[ os.path.join(webroot, 'js', js_file) for js_file in js_files ]) + print 'Minifying JS' + minifier.minify('js', os.path.join(webroot, 'js', '__utm.js'), os.path.join(webroot, 'js', '__utm.min.js')) + minifier.minify('js', js_concatenated, os.path.join(webroot, 'js', 'jquery.addons.min.js')) + os.remove(js_concatenated) + + print 'Concatenating CSS' + css_concatenated = minifier.concatFiles(sourceNames=[ + os.path.join(webroot, 'css', 'type.css'), + os.path.join(webroot, 'css', 'color.css'), + {'prefix': "@media screen, projection {", 'file': os.path.join(webroot, 'css', 'screen.css'), 'suffix':'}'}, + {'prefix': "@media print {", 'file': os.path.join(webroot, 'css', 'print.css'), 'suffix':'}'}, + ]) + print 'Minifying CSS' + minifier.minify('css', css_concatenated, os.path.join(webroot, 'css', 'style.min.css')) + os.remove(css_concatenated) - for product_type, products in MINIFY_PRODUCTS.iteritems(): - for product_fn, product_parts in products.iteritems(): - - # Make the final product path absolute. - product_fn = os.path.join(webroot, *product_fn.split('/')) - - # Make all product part file paths absolute. - abs_parts = [] - for spec in product_parts: - spec['file'] = os.path.join(webroot, *spec['file'].split('/')) - abs_parts.append(spec) - - # Concatenate all the product parts to a temp file. - print 'Concatenating %s (%s)' % (product_type, product_fn) - print "\n".join([" * %s" % x['file'] for x in abs_parts]) - concat_fn = minifier.concatFiles(sourceNames=abs_parts) - - # Minify the temp file for product type, dump into final - # product path. - print 'Minifying %s (%s)' % (product_type, product_fn) - minifier.minify(product_type, concat_fn, product_fn) - - # Clean up the intermediate temp file. - os.remove(concat_fn) def compilePo(): """compile all .po files to Gettext .mo files""" |