From 2b1d538a19da3dd9b3ffc0d439563d4ef408f8cf Mon Sep 17 00:00:00 2001 From: bnu Date: Fri, 15 Nov 2013 00:44:08 +0900 Subject: [PATCH] =?UTF-8?q?#41=20build=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80=20(grunt)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gruntfile.js | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 11 ++++++ 2 files changed, 119 insertions(+) create mode 100644 Gruntfile.js create mode 100644 package.json diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 000000000..6371c166e --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,108 @@ +module.exports = function(grunt) { + "use strict"; + + grunt.file.defaultEncoding = 'utf8'; + + grunt.initConfig({ + }); + + grunt.registerTask('build', '', function(A, B) { + if(!A || !B) grunt.fail.warn('Undefined build target.'); + + var done = this.async(); + var build_dir = 'build'; + var archive_full = build_dir + '/xe.' + B + '.tar.gz'; + var archive_changed = build_dir + '/xe.' + B + '.changed.tar.gz'; + var diff; + var tasks = ['changed', 'krzip', 'syndication']; + var taskDone = function() { + tasks.pop(); + grunt.verbose.writeln('remain tasks : '+tasks.length); + + if(tasks.length === 0) { + grunt.util.spawn({ + cmd: "tar", + args: ['cfz', 'xe.'+B+'.tar.gz', 'xe/'], + opts: { + cwd: 'build' + } + }, function (error, result, code) { + grunt.log.ok('Archived(full) : ' + archive_full); + + grunt.file.delete('build/xe'); + grunt.file.delete('build/temp.full.tar'); + + grunt.log.ok('Done!'); + }); + } + }; + + if(grunt.file.isDir(build_dir)) { + grunt.file.delete(build_dir); + } + grunt.file.mkdir(build_dir); + grunt.file.mkdir(build_dir + '/xe'); + + grunt.log.subhead('Archiving...'); + grunt.log.writeln('Target : ' + A + '...' + B); + + grunt.util.spawn({ + cmd: "git", + args: ['diff', '--name-only', A + '...' + B] + }, function (error, result, code) { + diff = result.stdout; + + if(diff) { + diff = diff.split(grunt.util.linefeed); + } + + grunt.util.spawn({ + cmd: "git", + args: ['archive', '--output=build/temp.full.tar', B, '.'] + }, function (error, result, code) { + + grunt.util.spawn({ + cmd: "tar", + args: ['xf', 'build/temp.full.tar', '-C' + , 'build/xe'], + }, function (error, result, code) { + + // krzip + grunt.util.spawn({ + cmd: "git", + args: ['clone', 'git@github.com:xpressengine/module-krzip.git', 'build/xe/modules/module-krzip'] + }, function (error, result, code) { + grunt.file.delete('build/xe/modules/module-krzip/.git'); + taskDone(); + }); + + // syndication + grunt.util.spawn({ + cmd: "git", + args: ['clone', 'git@github.com:xpressengine/module-syndication.git', 'build/xe/modules/syndication'] + }, function (error, result, code) { + grunt.file.delete('build/xe/modules/syndication/.git'); + taskDone(); + }); + }); + + // changed + if(diff.length) { + var args = ['archive', '--prefix=xe/', '-o', 'build/xe.'+B+'.changed.tar.gz', B]; + args = args.concat(diff); + grunt.util.spawn({ + cmd: "git", + args: args + }, function (error, result, code) { + grunt.log.ok('Archived(changed) : ./build/xe.'+B+'.changed.tar.gz'); + taskDone(); + }); + } else { + taskDone(); + } + }); + }); + }); + + grunt.registerTask('default', ['build']); +}; diff --git a/package.json b/package.json new file mode 100644 index 000000000..3517b4a32 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "XpressEngine", + "devDependencies": { + "grunt": ">0.4.0", + "grunt-contrib-clean": "~0.5.0" + }, + "main": "Gruntfile.js", + "scripts": { + "test": "grunt" + } +}