add dist files builder and tester to Gruntfile
[mootools.git] / Gruntfile.js
blobdda26c3b5ae137db1522a73672b5fd11e79567cd
1 "use strict";
3 module.exports = function(grunt) {
5         grunt.loadNpmTasks('grunt-contrib-uglify');
7         require('load-grunt-tasks')(grunt);
8         var YAML = require('js-yaml');
9         var fs   = require('fs');
10         var browser = process.env.BROWSER;
11         var travisBuild = process.env.BUILD;
12         var pullRequest = process.env.TRAVIS_PULL_REQUEST;
13         var ymlPackage = YAML.safeLoad(fs.readFileSync('package.yml', 'utf8'));
15         grunt.initConfig({
16                 'connect': {
17                         testserver: {
18                                 options: {
19                                         // We use end2end task (which does not start the webserver)
20                                         // and start the webserver as a separate process
21                                         // to avoid https://github.com/joyent/libuv/issues/826
22                                         port: 8000,
23                                         hostname: '0.0.0.0',
24                                         middleware: function(connect, options) {
25                                                 return [
26                                                         function(req, resp, next) {
27                                                                 // cache get requests to speed up tests on travis
28                                                                 if (req.method === 'GET') {
29                                                                         resp.setHeader('Cache-control', 'public, max-age=3600');
30                                                                 }
32                                                                 next();
33                                                         },
34                                                         connect.static(options.base)
35                                                 ];
36                                         }
37                                 }
38                         }
39                 },
41                 'packager': {
43                         options: {
44                                 name: 'Core'
45                         },
47                         all: {
48                                 src: ymlPackage.sources,
49                                 dest: 'mootools-all.js'
50                         },
52                         nocompat: {
53                                 options: {
54                                         strip: ['.*compat'],
55                                         only: '<%= grunt.option("file") && "Core/" + grunt.option("file") %>'
56                                 },
57                                 src: ymlPackage.sources,
58                                 dest: 'mootools-nocompat.js'
59                         },
61                         specs: {
62                                 options: {
63                                         name: 'Specs'
64                                 },
65                                 src: 'Specs/<%= grunt.option("module") || "**" %>/<%= grunt.option("file") || "*" %>.js',
66                                 dest: 'mootools-specs.js'
67                         },
69                         'specs-nocompat': {
70                                 options: {
71                                         name: 'Specs',
72                                         strip: ['.*compat'],
73                                         only: '<%= grunt.option("file") && "Specs/" + grunt.option("file") %>'
74                                 },
75                                 src: 'Specs/**/*.js',
76                                 dest: 'mootools-specs.js'
77                         },
78                         
79                         'dist-nocompat': {
80                                 options: {
81                                         strip: ['.*compat'],
82                                         only: '<%= grunt.option("file") && "Core/" + grunt.option("file") %>'
83                                 },
84                                 src: ymlPackage.sources,
85                                 dest: 'dist/mootools-core.js'
86                         },
87                         
88                         'dist-all': {
89                                 src: ymlPackage.sources,
90                                 dest: 'dist/mootools-core-compat.js'
91                         }
93                 },
94                 
95                 uglify: {
96                         options: {
97                                 mangle: false,
98                                 compress: true
99                         },
100                         dist: {
101                                 files: [
102                                         {'dist/mootools-core.min.js': ['dist/mootools-core.js']},
103                                         {'dist/mootools-core-compat.min.js': ['dist/mootools-core-compat.js']}
104                                 ]
105                         }
106                 },
107                 
108                 'karma': {
110                         options: {
111                                 captureTimeout: 60000 * 2,
112                                 singleRun: true,
113                                 frameworks: ['jasmine', 'sinon'],
114                                 files: ['Tests/Utilities/*.js', 'mootools-*.js'],
115                                 sauceLabs: {
116                                         username: process.env.SAUCE_USERNAME,
117                                         accessKey: process.env.SAUCE_ACCESS_KEY,
118                                         testName: 'MooTools-Core. Build: ' + travisBuild + '. Browser: ' + browser
119                                 },
120                                 reporters: ['progress', 'saucelabs'],
121                                 customLaunchers: {
122                                         chrome_linux: {
123                                                 base: 'SauceLabs',
124                                                 browserName: 'chrome',
125                                                 platform: 'linux'
126                                         },
127                                         firefox_linux: {
128                                                 base: 'SauceLabs',
129                                                 browserName: 'firefox',
130                                                 platform: 'linux'
131                                         },
132                                         opera_win2000: {
133                                                 base: 'SauceLabs',
134                                                 browserName: 'opera',
135                                                 platform: 'Windows 2008',
136                                                 version: '12'
137                                         },
138                                         safari7: {
139                                                 base: 'SauceLabs',
140                                                 browserName: 'safari',
141                                                 platform: 'OS X 10.9',
142                                                 version: '7'
143                                         },
144                                         safari6: {
145                                                 base: 'SauceLabs',
146                                                 browserName: 'safari',
147                                                 platform: 'OS X 10.8',
148                                                 version: '6'
149                                         },
150                                         safari5_osx10_6: {
151                                                 base: 'SauceLabs',
152                                                 browserName: 'safari',
153                                                 version: '5',
154                                                 platform: 'OS X 10.6'
155                                         },
156                                         safari5_win7: {
157                                                 base: 'SauceLabs',
158                                                 browserName: 'safari',
159                                                 version: '5',
160                                                 platform: 'Windows 7'
161                                         },
162                                         ie11: {
163                                                 base: 'SauceLabs',
164                                                 browserName: 'internet explorer',
165                                                 platform: 'Windows 8.1',
166                                                 version: '11'
167                                         },
168                                         ie10: {
169                                                 base: 'SauceLabs',
170                                                 browserName: 'internet explorer',
171                                                 platform: 'Windows 8',
172                                                 version: '10'
173                                         },
174                                         ie9: {
175                                                 base: 'SauceLabs',
176                                                 browserName: 'internet explorer',
177                                                 platform: 'Windows 7',
178                                                 version: '9'
179                                         },
180                                         ie8: {
181                                                 base: 'SauceLabs',
182                                                 browserName: 'internet explorer',
183                                                 platform: 'Windows 7',
184                                                 version: '8'
185                                         },
186                                         ie7: {
187                                                 base: 'SauceLabs',
188                                                 browserName: 'internet explorer',
189                                                 platform: 'Windows XP',
190                                                 version: '7'
191                                         },
192                                         ie6: {
193                                                 base: 'SauceLabs',
194                                                 browserName: 'internet explorer',
195                                                 platform: 'Windows XP',
196                                                 version: '6'
197                                         },
198                                         iphone_7: {
199                                                 base: 'SauceLabs',
200                                                 browserName: 'iphone',
201                                                 platform: 'OS X 10.9',
202                                                 version: '7',
203                                                 deviceOrientation: 'portrait'
204                                         },
205                                         iphone_6_1: {
206                                                 base: 'SauceLabs',
207                                                 browserName: 'iphone',
208                                                 platform: 'OS X 10.8',
209                                                 version: '6.1',
210                                                 deviceOrientation: 'portrait'
211                                         },
212                                         iphone_6: {
213                                                 base: 'SauceLabs',
214                                                 browserName: 'iphone',
215                                                 platform: 'OS X 10.8',
216                                                 version: '6',
217                                                 deviceOrientation: 'portrait'
218                                         }
219                                 },
220                         },
222                         continuous: {
223                                 browsers: ['PhantomJS']
224                         },
226                         sauceTask: {
227                                 browsers: [browser]
228                         },
230                         dev: {
231                                 singleRun: false,
232                                 browsers: ['PhantomJS'],
233                                 reporters: 'dots'
234                         },
235                         
236                         // Testers for dist build files
237                         compatFull: {
238                                 options: {
239                                         browsers: ['PhantomJS'], 
240                                         files: ['dist/mootools-core-compat.js', 'mootools-specs.js', 'Tests/Utilities/*.js']
241                                 }
242                         },
243                         compatUglyfied: {
244                                 options: {
245                                         browsers: ['PhantomJS'], 
246                                         files: ['dist/mootools-core-compat.min.js', 'mootools-specs.js', 'Tests/Utilities/*.js']
247                                 }
248                         },
249                         nocompatFull: {
250                                 options: {
251                                         browsers: ['PhantomJS'], 
252                                         files: ['dist/mootools-core.js', 'mootools-specs.js', 'Tests/Utilities/*.js']
253                                 }
254                         },
255                         nocompatUglified: {
256                                 options: {
257                                         browsers: ['PhantomJS'], 
258                                         files: ['dist/mootools-core.min.js', 'mootools-specs.js', 'Tests/Utilities/*.js']
259                                 }
260                         }
261                 },
263                 'clean': {
264                         dist: {src: 'dist/mootools-*.js'},
265                         specs: {src: 'mootools-*.js'}
266                 }
268         });
270         var compatBuild = ['clean:specs', 'packager:all', 'packager:specs'];
271         var nocompatBuild = ['clean:specs', 'packager:nocompat', 'packager:specs-nocompat'];
272         var tasks = travisBuild == 'default' ? compatBuild : nocompatBuild;
273         tasks =  pullRequest != 'false' ? tasks.concat('karma:continuous') : tasks.concat('karma:sauceTask');
275         grunt.registerTask('default', compatBuild.concat('karma:continuous'));
276         grunt.registerTask('nocompat', nocompatBuild.concat('karma:continuous'));
277         grunt.registerTask('default:travis', tasks);
278         grunt.registerTask('distBuild', [
279                 // Build dist files
280                 'clean:dist', 'packager:dist-all', 'packager:dist-nocompat', 'uglify',
281                 // Test specs against dist files
282                 'clean:specs', 'packager:specs', 'karma:compatFull', 'karma:compatUglyfied',
283                 'clean:specs', 'packager:specs-nocompat', 'karma:nocompatFull', 'karma:nocompatUglified'
284         ]);