-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathGruntfile.js
105 lines (84 loc) · 3.26 KB
/
Gruntfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
var fs = require('fs');
var cp = require('child_process');
var path = require('path');
var util = require('util');
function getDirectories() {
return [
'./src/diagnostic-channel',
'./src/diagnostic-channel-publishers',
'./src/publisher-legacy-tests/winston2',
'./src/publisher-legacy-tests/mongo3.2.7'
];
}
function getAdditionalDirectories() {
return [
'./src/subs/bunyan-sub',
'./src/subs/console-sub',
'./src/subs/mongodb-sub',
'./src/subs/mysql-sub',
'./src/subs/redis-sub',
'./sample'];
}
/*
* Synchronously run an npm task in a single directory. Return error code of spawned process.
*/
function runNpmTask(taskName, directory) {
console.log(`running ${taskName} in ${directory}`);
var opts = {
cwd: directory,
env: process.env,
stdio: 'inherit',
shell: true
};
args = taskName.split(' ');
var proc = cp.spawnSync('npm', args, opts);
if (proc.error) {
process.stderr.write(proc.error.toString());
}
return proc.status;
}
function runNpmTasks(taskName, dirs) {
for (var i = 0; i < dirs.length; i++) {
var rc = runNpmTask(taskName, dirs[i]);
if (rc !== 0) {
throw new Error(`$Error: command \`${taskName}\` in directory ${dirs[i]} failed with return code ${rc}`);
}
}
}
module.exports = function (grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
});
grunt.registerTask('install-sub', 'Install in sub directories.', function (arg1, arg2) {
runNpmTasks('install', getAdditionalDirectories());
});
grunt.registerTask('install-main', 'Install in main directories.', function (arg1, arg2) {
runNpmTask('link', './src/diagnostic-channel');
runNpmTask('link diagnostic-channel', './src/diagnostic-channel-publishers');
runNpmTask('install', './src/diagnostic-channel-publishers');
runNpmTask('install', './src/diagnostic-channel');
runNpmTask('install', './src/publisher-legacy-tests/winston2');
runNpmTask('install', './src/publisher-legacy-tests/mongo3.2.7');
});
grunt.registerTask('build-sub', 'Build in sub directories.', function (arg1, arg2) {
runNpmTasks('run build', getAdditionalDirectories());
});
grunt.registerTask('build-main', 'Build in main directories.', function (arg1, arg2) {
runNpmTasks('run build', getDirectories());
});
grunt.registerTask('test-main', 'Test in main directories.', function (arg1, arg2) {
runNpmTasks('run test', getDirectories());
});
grunt.registerTask('lint', 'Lint in all directories', function (arg1, arg2) {
runNpmTasks('run lint', getDirectories().concat(getAdditionalDirectories()));
});
grunt.registerTask('clean', 'Clean main directories.', function (arg1, arg2) {
runNpmTasks('run clean', getDirectories());
});
grunt.registerTask('init', ['install-main', 'build-main', 'install-sub', 'build-sub']);
grunt.registerTask('build', ['install-main', 'build-main']);
grunt.registerTask('test', ['build-main', 'test-main']);
grunt.registerTask('lint', ['lint']);
grunt.registerTask('clean', ['install-main', 'build-main']);
};