1 | var spawn = require('child_process').spawn;
|
2 | var archiver = require('archiver');
|
3 | var fs = require('fs');
|
4 | var pathResolve = require('path').resolve;
|
5 | var _ = require('underscore');
|
6 |
|
7 | function bundleSources(appPath, buildLocation, dirExclusions, callback) {
|
8 | try {
|
9 | callback = _.once(callback);
|
10 | var bundlePath = pathResolve(buildLocation, 'bundle.tar.gz');
|
11 | var sourceDir = pathResolve(process.cwd(), appPath);
|
12 | console.log('Source dir: ', sourceDir);
|
13 |
|
14 | var output = fs.createWriteStream(bundlePath);
|
15 | var archive = archiver('tar', {
|
16 | gzip: true,
|
17 | gzipOptions: {
|
18 | level: 6
|
19 | }
|
20 | });
|
21 |
|
22 | archive.pipe(output);
|
23 | output.once('close', callback);
|
24 |
|
25 | archive.once('error', function(err) {
|
26 | console.log("=> Archiving failed:", err.message);
|
27 | callback(err);
|
28 | });
|
29 |
|
30 | var filenames = fs.readdirSync(sourceDir);
|
31 | for(var i = 0; i < filenames.length; i++) {
|
32 | var filename = filenames[i];
|
33 | if(dirExclusions.findIndex(function (exclusion) { return filename === exclusion; }) !== -1) {
|
34 | continue;
|
35 | }
|
36 | var filePath = pathResolve(sourceDir, filename);
|
37 | var stats = fs.statSync(filePath);
|
38 | if(stats.isDirectory() && filename[0] !== '.') {
|
39 | archive.directory(filePath, filename);
|
40 | } else if(stats.isFile()) {
|
41 | archive.file(filePath, { name: filename });
|
42 | }
|
43 | }
|
44 | archive.finalize();
|
45 | }
|
46 | catch(err) {
|
47 | callback(err);
|
48 | }
|
49 | }
|
50 |
|
51 | module.exports = bundleSources;
|