Build/grunt: Add sizer task. Some cleanup in other areas.

This commit is contained in:
Jörn Zaefferer 2012-03-09 15:18:26 +01:00
parent 60bbda3eb9
commit ff5895a39f

View File

@ -65,6 +65,12 @@ config.init({
bannerI18n: createBanner(allI18nFiles), bannerI18n: createBanner(allI18nFiles),
bannerCSS: createBanner(cssFiles) bannerCSS: createBanner(cssFiles)
}, },
compare_size: {
files: [
"dist/jquery-ui.js",
"dist/jquery-ui.min.js"
]
},
concat: { concat: {
ui: { ui: {
src: ['<banner:meta.bannerAll>', stripBanner(uiFiles)], src: ['<banner:meta.bannerAll>', stripBanner(uiFiles)],
@ -242,11 +248,6 @@ for (var key in files) {
files[key] = template.process(files[key], config()); files[key] = template.process(files[key], config());
} }
config('files', files); config('files', files);
// log.writeln(require('util').inspect(config().files))
task.registerTask('x', function() {
log.writeln(task.helper('concat', ['<file_strip_banner:ui/jquery.ui.core.js>']));
});
task.registerBasicTask('copy', 'Copy files to destination folder and replace @VERSION with pkg.version', function(data) { task.registerBasicTask('copy', 'Copy files to destination folder and replace @VERSION with pkg.version', function(data) {
function replaceVersion(source) { function replaceVersion(source) {
@ -377,9 +378,79 @@ task.registerTask('copy_themes', function() {
}); });
}); });
// TODO add size task, see also build/sizer.js - copy from core grunt.js // TODO merge with code in jQuery Core, share as grunt plugin/npm
// this here actually uses the provided filenames in the output
// the helpers should just be regular functions, no need to share those with the world
task.registerBasicTask("compare_size", "Compare size of this branch to master", function(data) {
var files = file.expand(data.src),
done = this.async(),
sizecache = __dirname + "/dist/.sizecache.json",
sources = {
min: file.read(files[1]),
max: file.read(files[0])
},
oldsizes = {},
sizes = {};
task.registerTask('default', 'lint qunit'); try {
oldsizes = JSON.parse(file.read(sizecache));
} catch(e) {
oldsizes = {};
}
// Obtain the current branch and continue...
task.helper("git_current_branch", function(err, branch) {
var key, diff;
// Derived and adapted from Corey Frang's original `sizer`
log.writeln( "sizes - compared to master" );
sizes[files[0]] = sources.max.length;
sizes[files[1]] = sources.min.length;
sizes[files[1] + '.gz'] = task.helper("gzip", sources.min).length;
for ( key in sizes ) {
diff = oldsizes[ key ] && ( sizes[ key ] - oldsizes[ key ] );
if ( diff > 0 ) {
diff = "+" + diff;
}
console.log( "%s %s %s",
task.helper("lpad", sizes[ key ], 8 ),
task.helper("lpad", diff ? "(" + diff + ")" : "(-)", 8 ),
key
);
}
if ( branch === "master" ) {
// If master, write to file - this makes it easier to compare
// the size of your current code state to the master branch,
// without returning to the master to reset the cache
file.write( sizecache, JSON.stringify(sizes) );
}
done();
});
});
task.registerHelper("git_current_branch", function(done) {
task.helper("child_process", {
cmd: "git",
args: ["branch", "--no-color"]
}, function(err, result) {
var branch;
result.split("\n").forEach(function(branch) {
var matches = /^\* (.*)/.exec( branch );
if ( matches !== null && matches.length && matches[ 1 ] ) {
done( null, matches[ 1 ] );
}
});
});
});
task.registerHelper("lpad", function(str, len, chr) {
return ( Array( len + 1 ).join( chr || " " ) + str ).substr( -len );
});
task.registerTask('default', 'lint qunit build compare_size');
task.registerTask('sizer', 'concat:ui min:dist/jquery-ui.min.js compare_size');
task.registerTask('build', 'concat min css_min'); task.registerTask('build', 'concat min css_min');
task.registerTask('release', 'build copy:dist copy:dist_min copy:dist_min_images copy:dist_css_min md5:dist zip:dist'); task.registerTask('release', 'build copy:dist copy:dist_min copy:dist_min_images copy:dist_css_min md5:dist zip:dist');
task.registerTask('release_themes', 'release download_themes copy_themes copy:themes md5:themes zip:themes'); task.registerTask('release_themes', 'release download_themes copy_themes copy:themes md5:themes zip:themes');