Skip to content

Commit

Permalink
Grunt: You can now specify arguments for building core, packages and …
Browse files Browse the repository at this point in the history
…themes :)
  • Loading branch information
andersevenrud committed Jul 11, 2015
1 parent 78cda65 commit 8042120
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 103 deletions.
128 changes: 72 additions & 56 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@
/**
* Task: Build packages
*/
grunt.registerTask('packages', 'Build dist package files', function(arg) {
grunt.registerTask('packages', 'Build dist package files (or a single package, ex: grunt packages:default/About)', function(arg) {
clean(['dist/packages'], ['dist/packages']);

var done = this.async();
Expand All @@ -118,87 +118,82 @@
done();
}

_build.buildPackages(grunt, finished);
_build.buildPackages(arg, grunt, finished);
});

/**
* Task: Build themes
*/
grunt.registerTask('themes', 'Build theme files', function(arg) {
grunt.registerTask('themes', 'Build theme files (arguments: resources, fonts. Or a single theme, ex: grunt themes:MyThemename)', function(arg) {
var done = this.async();
arg = arg || 'all';

function finished() {
var src, dst;

grunt.log.subhead('Copying static files');
if ( arg === 'all' || arg === 'resources' ) {
grunt.log.subhead('Copying static files');

src = _path.join(ROOT, 'src', 'themes', 'wallpapers');
dst = _path.join(ROOT, 'dist', 'themes', 'wallpapers');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);
src = _path.join(ROOT, 'src', 'themes', 'wallpapers');
dst = _path.join(ROOT, 'dist', 'themes', 'wallpapers');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);

src = _path.join(ROOT, 'src', 'themes', 'icons');
dst = _path.join(ROOT, 'dist', 'themes', 'icons');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);
src = _path.join(ROOT, 'src', 'themes', 'icons');
dst = _path.join(ROOT, 'dist', 'themes', 'icons');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);

src = _path.join(ROOT, 'src', 'themes', 'fonts');
dst = _path.join(ROOT, 'dist', 'themes', 'fonts');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);
src = _path.join(ROOT, 'src', 'themes', 'fonts');
dst = _path.join(ROOT, 'dist', 'themes', 'fonts');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);

src = _path.join(ROOT, 'src', 'themes', 'sounds');
dst = _path.join(ROOT, 'dist', 'themes', 'sounds');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);
src = _path.join(ROOT, 'src', 'themes', 'sounds');
dst = _path.join(ROOT, 'dist', 'themes', 'sounds');
grunt.log.writeln(' cp ' + src + ' -> ' + dst);
_fs.copySync(src, dst);
}

grunt.log.subhead('Cleaning up');

src = _path.join(ROOT, 'dist', 'themes', 'styles');
_build.getDirs(src).forEach(function(dir) {
(['metadata.json', 'style.less', 'base.less']).forEach(function(i) {
dst = _path.join(src, dir, i);
grunt.log.writeln(' rm ' + dst);
_fs.removeSync(dst);
});
});

src = _path.join(ROOT, 'dist', 'themes', 'fonts');
_build.getDirs(src).forEach(function(dir) {
dst = _path.join(src, dir, 'style.css');
grunt.log.writeln(' rm ' + dst);
_fs.removeSync(dst);
if ( arg === 'all' || arg === dir ) {
(['metadata.json', 'style.less', 'base.less']).forEach(function(i) {
dst = _path.join(src, dir, i);
grunt.log.writeln(' rm ' + dst);
_fs.removeSync(dst);
});
}
});

(['sounds', 'icons']).forEach(function(i) {
src = _path.join(ROOT, 'dist', 'themes', i);
if ( arg === 'all' ) {
src = _path.join(ROOT, 'dist', 'themes', 'fonts');
_build.getDirs(src).forEach(function(dir) {
dst = _path.join(src, dir, 'metadata.json');
dst = _path.join(src, dir, 'style.css');
grunt.log.writeln(' rm ' + dst);
_fs.removeSync(dst);
});
});

done();
}

clean(['dist/themes'], ['dist/themes', 'dist/themes/styles']);
(['sounds', 'icons']).forEach(function(i) {
src = _path.join(ROOT, 'dist', 'themes', i);
_build.getDirs(src).forEach(function(dir) {
dst = _path.join(src, dir, 'metadata.json');
grunt.log.writeln(' rm ' + dst);
_fs.removeSync(dst);
});
});
}

grunt.log.subhead('Building fonts');
_build.buildFonts(grunt, function(err, result) {
if ( err ) {
grunt.log.errorlns('An error occured while building fonts');
grunt.log.errorlns(err);
done();

finished();
return;
} else {
var dest = _path.join(ROOT, 'dist', 'themes', 'fonts.css');
grunt.log.writeln('>>> ' + dest);
_fs.writeFileSync(dest, result);
}
clean(['dist/themes'], ['dist/themes', 'dist/themes/styles']);
}

function buildStyles() {
grunt.log.subhead('Building styles');
_build.buildStyles(grunt, function(err) {
_build.buildStyles(arg, grunt, function(err) {
if ( err ) {
grunt.log.errorlns('An error occured while building styles');
grunt.log.errorlns(err);
Expand All @@ -208,7 +203,28 @@
grunt.verbose.ok();
finished();
});
});
}

if ( arg === 'all' || arg === 'fonts' ) {
grunt.log.subhead('Building fonts');
_build.buildFonts(grunt, function(err, result) {
if ( err ) {
grunt.log.errorlns('An error occured while building fonts');
grunt.log.errorlns(err);

finished();
return;
} else {
var dest = _path.join(ROOT, 'dist', 'themes', 'fonts.css');
grunt.log.writeln('>>> ' + dest);
_fs.writeFileSync(dest, result);
}

buildStyles();
});
} else {
buildStyles();
}
});

/**
Expand Down Expand Up @@ -238,13 +254,13 @@
/**
* Task: Compress build
*/
grunt.registerTask('compress', 'Compress dist files', function(arg) {
grunt.registerTask('compress', 'Compress dist files (arguments: all, core, packages, ex: grunt compress:core)', function(arg) {
var done = this.async();
function finished() {
grunt.verbose.ok();
done();
}
_build.compress(grunt, finished);
_build.compress(arg, grunt, finished);
});

/**
Expand Down
118 changes: 71 additions & 47 deletions src/tools/grunt-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -436,12 +436,20 @@
// THEME BUILDER
/////////////////////////////////////////////////////////////////////////////

function buildStyles(grunt, cb) {
function buildStyles(arg, grunt, cb) {
arg = arg || 'all';

var q = new Queue();
var dir = _path.join(ROOT, 'src', 'themes', 'styles');

getDirs(dir).forEach(function(name) {
if ( !name.match(/^\.|\_/) ) {
if ( arg !== 'all' ) {
if ( arg !== 'styles' && arg !== name ) {
return;
}
}

q.add(function(next) {
grunt.log.subhead('* Building theme styles for "' + name + '"');

Expand Down Expand Up @@ -600,7 +608,8 @@
// PACKAGE BUILDER
/////////////////////////////////////////////////////////////////////////////

function buildPackages(grunt, finished) {
function buildPackages(arg, grunt, finished) {
arg = arg || 'all';

var q = new Queue();

Expand Down Expand Up @@ -714,24 +723,33 @@
});
}

var dirs, repo, src, dst;
for ( var i = 0; i < REPOS.length; i++ ) {
try {
repo = REPOS[i];
dirs = getDirs(_path.join(ROOT, 'src', 'packages', repo));
for ( var d = 0; d < dirs.length; d++ ) {
function buildRepo(repo, dirs) {
var atom;
for ( var d = 0; d < dirs.length; d++ ) {
atom = repo + '/' + dirs[d];
if ( arg === 'all' || arg === atom ) {
build_package(repo, dirs[d]);
}
}

if ( arg === 'all' ) {
q.add(function(cb) {
src = _path.join(ROOT, 'src', 'packages', repo, 'repository.json');
dst = _path.join(ROOT, 'dist', 'packages', repo, 'repository.json');
var src = _path.join(ROOT, 'src', 'packages', repo, 'repository.json');
var dst = _path.join(ROOT, 'dist', 'packages', repo, 'repository.json');
grunt.log.writeln('\n>>> ' + dst);
_fs.copySync(src, dst);

cb();
});
}
}

var dirs, repo;
for ( var i = 0; i < REPOS.length; i++ ) {
try {
repo = REPOS[i];
dirs = getDirs(_path.join(ROOT, 'src', 'packages', repo));

buildRepo(repo, dirs);
} catch ( e ) {
grunt.fail.warn('WARNING: Failed to list directory ' + REPOS[i] + ': ' + e);
}
Expand Down Expand Up @@ -864,7 +882,9 @@
// COMPRESSION
/////////////////////////////////////////////////////////////////////////////

function doCompress(grunt, finished) {
function doCompress(arg, grunt, finished) {
arg = arg || 'all';

var q = new Queue();
var ugly = require('uglify-js'),
ccss = require('clean-css');
Expand All @@ -887,7 +907,7 @@
function compress_js(src, dest, cb) {
dest = dest || src;

var minified = ugly.minify(src).code;
var minified = ugly.minify(src,{comments:true}).code;
grunt.file.write(dest, minified);
cb();
}
Expand Down Expand Up @@ -934,48 +954,52 @@

grunt.log.subhead('Compressing Core');

var out_css = _path.join(ROOT, BUILD.stylesheets.output);
q.add(function(cb) {
var src = out_css;
var dst = out_css.replace(/\.css$/, '.tmp.css');
grunt.log.writeln('<<< ' + src);
compress_css(src, dst, cb);
});
if ( arg === 'all' || arg === 'core' ) {
var out_css = _path.join(ROOT, BUILD.stylesheets.output);
q.add(function(cb) {
var src = out_css.replace(/\.css$/, '.tmp.css');
var dst = out_css;
grunt.log.writeln('>>> ' + dst);
_fs.renameSync(src, dst);
cb();
var src = out_css;
var dst = out_css.replace(/\.css$/, '.tmp.css');
grunt.log.writeln('<<< ' + src);
compress_css(src, dst, cb);
});
q.add(function(cb) {
var src = out_css.replace(/\.css$/, '.tmp.css');
var dst = out_css;
grunt.log.writeln('>>> ' + dst);
_fs.renameSync(src, dst);
cb();
});

var out_js = _path.join(ROOT, BUILD.javascript.output);
q.add(function(cb) {
var src = out_js;
var dst = out_js.replace(/\.js$/, '.tmp.js');
grunt.log.writeln('<<< ' + src);
compress_js(src, dst, cb);
});
var out_js = _path.join(ROOT, BUILD.javascript.output);
q.add(function(cb) {
var src = out_js.replace(/\.js$/, '.tmp.js');
var dst = out_js;
grunt.log.writeln('>>> ' + dst);
_fs.renameSync(src, dst);
cb();
var src = out_js;
var dst = out_js.replace(/\.js$/, '.tmp.js');
grunt.log.writeln('<<< ' + src);
compress_js(src, dst, cb);
});
q.add(function(cb) {
var src = out_js.replace(/\.js$/, '.tmp.js');
var dst = out_js;
grunt.log.writeln('>>> ' + dst);
_fs.renameSync(src, dst);
cb();
});
}

q.add(function(cb) {
grunt.log.subhead('Compressing Packages');
var dirs;
for ( var i = 0; i < REPOS.length; i++ ) {
dirs = getDirs(_path.join(ROOT, 'src', 'packages', REPOS[i]));
for ( var d = 0; d < dirs.length; d++ ) {
compress_package(REPOS[i], dirs[d]);
if ( arg === 'all' || arg === 'packages' ) {
q.add(function(cb) {
grunt.log.subhead('Compressing Packages');
var dirs;
for ( var i = 0; i < REPOS.length; i++ ) {
dirs = getDirs(_path.join(ROOT, 'src', 'packages', REPOS[i]));
for ( var d = 0; d < dirs.length; d++ ) {
compress_package(REPOS[i], dirs[d]);
}
}
}

cb();
});
cb();
});
}

q.run(finished);
}
Expand Down

0 comments on commit 8042120

Please sign in to comment.