Skip to content

Commit 9f3a088

Browse files
committed
Grunt build
Removing Java dependency, production build in grunt for JS, CSS, images & localization fils.
1 parent 8e12e92 commit 9f3a088

14 files changed

Lines changed: 365 additions & 322 deletions

File tree

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.git

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,10 @@ frontend/express/node_modules/
44
api/config.js
55
frontend/express/config.js
66
frontend/express/public/javascripts/countly/countly.config.js
7+
frontend/express/certificates
8+
frontend/express/public/javascripts/min
9+
frontend/express/public/localization/min
10+
frontend/express/public/stylesheets/*.min.css
11+
plugins/plugins.json
12+
**/.DS_Store
13+
**/node_modules

Gruntfile.js

Lines changed: 244 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,119 @@ module.exports = function(grunt) {
1212
shadow:true,
1313
sub:true,
1414
node:true,
15-
"-W041": true,
16-
"-W038": true,
17-
"-W082": true,
18-
"-W058": true,
19-
"-W030": true,
20-
"-W032": true,
21-
"-W027": true,
22-
"-W018": true
15+
'-W041': true,
16+
'-W038': true,
17+
'-W082': true,
18+
'-W058': true,
19+
'-W030': true,
20+
'-W032': true,
21+
'-W027': true,
22+
'-W018': true
2323
},
2424
all: ['Gruntfile.js', 'api/api.js', 'api/lib/*.js', 'api/parts/**/*.js', 'api/utils/common.js', 'frontend/express/app.js', 'plugins/pluginManager.js', 'plugins/**/api/*.js', 'plugins/**/api/parts/**/*.js', 'plugins/**/frontend/*.js']
2525
},
26-
// Configure a mochaTest task
26+
concat: {
27+
options: {
28+
separator: ';'
29+
},
30+
dom: {
31+
src: [
32+
'frontend/express/public/javascripts/dom/jquery/jquery-1.8.3.min.js',
33+
'frontend/express/public/javascripts/dom/jquery.form.js',
34+
'frontend/express/public/javascripts/dom/tipsy/jquery.tipsy.js',
35+
'frontend/express/public/javascripts/dom/jquery.noisy.min.js',
36+
'frontend/express/public/javascripts/dom/jquery.sticky.headers.js',
37+
'frontend/express/public/javascripts/dom/jqueryui/jquery-ui-1.8.22.custom.min.js',
38+
'frontend/express/public/javascripts/dom/jqueryui/jquery-ui-i18n.js',
39+
'frontend/express/public/javascripts/dom/slimScroll.min.js',
40+
'frontend/express/public/javascripts/dom/jquery.easing.1.3.js',
41+
'frontend/express/public/javascripts/dom/dataTables/js/jquery.dataTables.js',
42+
'frontend/express/public/javascripts/dom/dataTables/js/ZeroClipboard.js',
43+
'frontend/express/public/javascripts/dom/dataTables/js/TableTools.js',
44+
],
45+
dest: 'frontend/express/public/javascripts/min/countly.dom.concat.js'
46+
},
47+
utils: {
48+
src: [
49+
'frontend/express/public/javascripts/utils/underscore-min.js',
50+
'frontend/express/public/javascripts/utils/prefixfree.min.js',
51+
'frontend/express/public/javascripts/utils/moment/moment.min.js',
52+
'frontend/express/public/javascripts/utils/moment/moment.isocalendar.min.js',
53+
'frontend/express/public/javascripts/utils/moment/lang-all.min.js',
54+
'frontend/express/public/javascripts/utils/handlebars.js',
55+
'frontend/express/public/javascripts/utils/backbone-min.js',
56+
'frontend/express/public/javascripts/utils/jquery.i18n.properties-min-1.0.9.js',
57+
'frontend/express/public/javascripts/utils/jstz.min.js',
58+
'frontend/express/public/javascripts/utils/store+json2.min.js',
59+
'frontend/express/public/javascripts/utils/jquery.idle-timer.js',
60+
'frontend/express/public/javascripts/utils/textcounter.min.js',
61+
'frontend/express/public/javascripts/utils/initialAvatar.js',
62+
'frontend/express/public/javascripts/utils/jquery.amaran.min.js',
63+
'frontend/express/public/javascripts/utils/jquery.titlealert.js',
64+
'frontend/express/public/javascripts/countly/countly.common.js',
65+
],
66+
dest: 'frontend/express/public/javascripts/min/countly.utils.concat.js'
67+
},
68+
visualization: {
69+
src: [
70+
'frontend/express/public/javascripts/visualization/jquery.peity.min.js',
71+
'frontend/express/public/javascripts/visualization/flot/jquery.flot.js',
72+
'frontend/express/public/javascripts/visualization/flot/jquery.flot.tickrotor.js',
73+
'frontend/express/public/javascripts/visualization/flot/jquery.flot.pie.js',
74+
'frontend/express/public/javascripts/visualization/flot/jquery.flot.resize.js',
75+
'frontend/express/public/javascripts/visualization/flot/jquery.flot.stack.js',
76+
'frontend/express/public/javascripts/visualization/gauge.min.js',
77+
'frontend/express/public/javascripts/visualization/d3/d3.v2.min.js',
78+
'frontend/express/public/javascripts/visualization/d3/d3.layout.min.js',
79+
'frontend/express/public/javascripts/visualization/rickshaw/rickshaw.min.js',
80+
],
81+
dest: 'frontend/express/public/javascripts/min/countly.visualization.concat.js'
82+
},
83+
lib: {
84+
src: [
85+
'frontend/express/public/javascripts/countly/countly.map.helper.js',
86+
'frontend/express/public/javascripts/countly/countly.event.js',
87+
'frontend/express/public/javascripts/countly/countly.session.js',
88+
'frontend/express/public/javascripts/countly/countly.city.js',
89+
'frontend/express/public/javascripts/countly/countly.location.js',
90+
'frontend/express/public/javascripts/countly/countly.user.js',
91+
'frontend/express/public/javascripts/countly/countly.device.list.js',
92+
'frontend/express/public/javascripts/countly/countly.device.js',
93+
'frontend/express/public/javascripts/countly/countly.device.detail.js',
94+
'frontend/express/public/javascripts/countly/countly.app.version.js',
95+
'frontend/express/public/javascripts/countly/countly.carrier.js',
96+
'frontend/express/public/javascripts/countly/countly.allapps.js',
97+
'frontend/express/public/javascripts/countly/countly.template.js',
98+
],
99+
dest: 'frontend/express/public/javascripts/min/countly.lib.concat.js'
100+
}
101+
},
102+
uglify: {
103+
options: {
104+
banner: '/*! Countly <%= grunt.template.today("dd-mm-yyyy") %> */\n'
105+
},
106+
dist: {
107+
files: {
108+
'frontend/express/public/javascripts/min/countly.dom.js': 'frontend/express/public/javascripts/min/countly.dom.concat.js',
109+
'frontend/express/public/javascripts/min/countly.utils.js': 'frontend/express/public/javascripts/min/countly.utils.concat.js',
110+
'frontend/express/public/javascripts/min/countly.visualization.js': 'frontend/express/public/javascripts/min/countly.visualization.concat.js',
111+
'frontend/express/public/javascripts/min/countly.lib.js': 'frontend/express/public/javascripts/min/countly.lib.concat.js',
112+
}
113+
}
114+
},
115+
copy: {},
116+
cssmin: {
117+
dist: {
118+
files: {
119+
'frontend/express/public/stylesheets/main.min.css': [
120+
'frontend/express/public/stylesheets/main.css',
121+
'frontend/express/public/stylesheets/amaranjs/amaran.min.css',
122+
'frontend/express/public/javascripts/dom/tipsy/tipsy.css',
123+
'frontend/express/public/javascripts/visualization/rickshaw/rickshaw.min.css',
124+
],
125+
}
126+
}
127+
},
27128
mochaTest: {
28129
test: {
29130
options: {
@@ -36,7 +137,140 @@ module.exports = function(grunt) {
36137
});
37138

38139
grunt.loadNpmTasks('grunt-contrib-jshint');
140+
grunt.loadNpmTasks('grunt-contrib-concat');
141+
grunt.loadNpmTasks('grunt-contrib-uglify');
142+
grunt.loadNpmTasks('grunt-contrib-copy');
143+
grunt.loadNpmTasks('grunt-contrib-cssmin');
39144
grunt.loadNpmTasks('grunt-mocha-test');
40-
grunt.registerTask('default', ['jshint', "mochaTest"]);
145+
146+
grunt.registerTask('default', ['jshint', 'mochaTest']);
147+
148+
grunt.registerTask('dist', ['concat', 'uglify', 'cssmin']);
149+
150+
grunt.registerTask('plugins', 'Minify plugin JS / CSS files and copy images', function(){
151+
var plugins = require('./plugins/plugins.json'), js = [], css = [], img = [], fs = require('fs'), path = require('path');
152+
console.log('Preparing production files for following plugins: %j', plugins);
153+
154+
plugins.forEach(function(plugin){
155+
var files, pluginPath = path.join(__dirname, 'plugins', plugin),
156+
javascripts = path.join(pluginPath, 'frontend/public/javascripts'),
157+
stylesheets = path.join(pluginPath, 'frontend/public/stylesheets'),
158+
images = path.join(pluginPath, 'frontend/public/images', plugin);
159+
160+
if (fs.statSync(javascripts).isDirectory()) {
161+
files = fs.readdirSync(javascripts);
162+
if (files.length) {
163+
// move models to the top, then all dependencies, then views
164+
for (var i = 0; i < files.length; i++) {
165+
if (files[i].indexOf('countly.models.js') !== -1 && i !== 0) {
166+
files.splice(0, 0, files.splice(i, 1)[0]);
167+
} else if (files[i].indexOf('countly.views.js') !== -1 && i !== files.length - 1) {
168+
files.splice(files.length - 1, 0, files.splice(i, 1)[0]);
169+
}
170+
}
171+
172+
files.forEach(function(name){
173+
var file = path.join(javascripts, name);
174+
if (fs.statSync(file).isFile()) {
175+
js.push('plugins/' + plugin + '/frontend/public/javascripts/' + name);
176+
}
177+
});
178+
}
179+
}
180+
181+
if (fs.statSync(stylesheets).isDirectory()) {
182+
files = fs.readdirSync(stylesheets);
183+
files.forEach(function(name){
184+
var file = path.join(stylesheets, name);
185+
if (fs.statSync(file).isFile() && name !== 'pre-login.css') {
186+
css.push('plugins/' + plugin + '/frontend/public/stylesheets/' + name);
187+
}
188+
});
189+
}
190+
191+
try {
192+
if (fs.statSync(images).isDirectory()) {
193+
img.push('plugins/' + plugin + '/frontend/public/images/' + plugin + '/**');
194+
}
195+
} catch(err) {
196+
if (err.code !== 'ENOENT') { throw err; }
197+
}
198+
});
199+
200+
grunt.config('copy.plugins.src', img);
201+
grunt.config('copy.plugins.dest', 'frontend/express/public/images/');
202+
grunt.config('copy.plugins.expand', true);
203+
grunt.config('copy.plugins.flatten', true);
204+
grunt.config('copy.plugins.filter', 'isFile');
205+
206+
grunt.config('concat.plugins.src', js);
207+
grunt.config('concat.plugins.dest', 'frontend/express/public/javascripts/min/countly.plugins.concat.js');
208+
209+
grunt.config('uglify.plugins.files.frontend/express/public/javascripts/min/countly\\.plugins\\.js', 'frontend/express/public/javascripts/min/countly.plugins.concat.js');
210+
211+
grunt.config('cssmin.plugins.files.frontend/express/public/stylesheets/plugins\\.min\\.css', css);
212+
213+
// grunt.task.loadTasks(['copy:plugins', 'concat:plugins', 'uglify:plugins']);
214+
// grunt.task.run(['concat', 'uglify']);
215+
grunt.task.run(['concat:plugins', 'uglify:plugins', 'copy:plugins', 'cssmin:plugins']);
216+
217+
console.log('Done preparing production files');
218+
});
219+
220+
grunt.registerTask('locales', 'Concat all locale files into one', function(){
221+
var plugins = require('./plugins/plugins.json'), locales = {}, fs = require('fs'), path = require('path');
222+
console.log('Preparing locale files for core & plugins: %j', plugins);
223+
224+
var pushLocaleFile = function(name, path){
225+
var lang = '';
226+
name = name.replace('.properties', '');
227+
if (name.indexOf('_') !== -1) {
228+
lang = name.split('_').pop();
229+
}
230+
231+
if (!locales[lang]) {
232+
locales[lang] = [];
233+
}
234+
235+
locales[lang].push(path);
236+
};
237+
238+
[path.join(__dirname, 'frontend/express/public/localization/dashboard'), path.join(__dirname, 'frontend/express/public/localization/help')].forEach(function(dir){
239+
fs.readdirSync(dir).forEach(function(name){
240+
var file = path.join(dir, name);
241+
if (fs.statSync(file).isFile()) {
242+
pushLocaleFile(name, dir + '/' + name);
243+
}
244+
});
245+
});
246+
247+
plugins.forEach(function(plugin){
248+
var localization = path.join(__dirname, 'plugins', plugin, 'frontend/public/localization');
249+
250+
try {
251+
if (fs.statSync(localization).isDirectory()) {
252+
fs.readdirSync(localization).forEach(function(name){
253+
var file = path.join(localization, name);
254+
if (fs.statSync(file).isFile()) {
255+
pushLocaleFile(name, 'plugins/' + plugin + '/frontend/public/localization/' + name);
256+
}
257+
});
258+
}
259+
} catch(err) {
260+
if (err.code !== 'ENOENT') { throw err; }
261+
}
262+
});
263+
264+
for (var lang in locales) {
265+
grunt.config('concat.locales_' + lang + '.options.separator', '\n\n');
266+
grunt.config('concat.locales_' + lang + '.src', locales[lang]);
267+
grunt.config('concat.locales_' + lang + '.dest', 'frontend/express/public/localization/min/locale' + (lang.length ? '_' + lang : '') + '.properties');
268+
grunt.task.run('concat:locales_' + lang);
269+
}
270+
271+
console.log('Done preparing locale files');
272+
});
41273

274+
grunt.registerTask('dist-all', ['dist', 'plugins', 'locales']);
275+
42276
};

bin/countly.install.sh

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,12 @@ if [ ! -f $DIR/../plugins/plugins.json ]; then
121121
cp $DIR/../plugins/plugins.default.json $DIR/../plugins/plugins.json
122122
fi
123123

124-
#compile scripts for production
125-
apt-get -y install default-jre
126-
bash $DIR/scripts/compile.js.sh
127-
128124
#install plugins
129125
bash $DIR/scripts/countly.install.plugins.sh
130126

127+
#compile scripts for production
128+
cd $DIR && grunt dist-all
129+
131130
#finally start countly api and dashboard
132131
if [ "$1" != "docker" ]
133132
then

bin/countly.install.travis.sh

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,11 @@ echo $plugins > plugins.json
123123

124124
)
125125

126-
#compile scripts for production
127-
apt-get -y install default-jre
128-
bash $DIR/scripts/compile.js.sh
129-
130126
#install plugins
131127
bash $DIR/scripts/countly.install.plugins.sh
132128

129+
#compile scripts for production
130+
cd $DIR && grunt dist-all
131+
133132
#finally start countly api and dashboard
134133
start countly-supervisor

bin/countly.user.install.sh

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,12 @@ if [ ! -f $DIR/../plugins/plugins.json ]; then
106106
cp $DIR/../plugins/plugins.default.json $DIR/../plugins/plugins.json
107107
fi
108108

109-
#compile scripts for production
110-
apt-get -y install default-jre
111-
bash $DIR/scripts/compile.js.sh
112-
113109
#install plugins
114110
bash $DIR/scripts/countly.install.plugins.sh
115111

112+
#compile scripts for production
113+
cd $DIR && grunt dist-all
114+
116115
if [ `getent passwd countly`x == 'x' ]; then
117116
useradd -r -M -U -d $COUNTLY_DIR -s /bin/false countly
118117
chown -R countly:countly $COUNTLY_DIR

0 commit comments

Comments
 (0)