Add MusikAnimal to CREDITS
[mediawiki.git] / Gruntfile.js
blob1ecc2c032fab3e0d7dab7c429c4ff882a31f8741
1 /* eslint-env node */
3 module.exports = function ( grunt ) {
5         var wgServer = process.env.MW_SERVER,
6                 wgScriptPath = process.env.MW_SCRIPT_PATH,
7                 WebdriverIOconfigFile,
8                 karmaProxy = {};
10         grunt.loadNpmTasks( 'grunt-banana-checker' );
11         grunt.loadNpmTasks( 'grunt-contrib-copy' );
12         grunt.loadNpmTasks( 'grunt-contrib-watch' );
13         grunt.loadNpmTasks( 'grunt-eslint' );
14         grunt.loadNpmTasks( 'grunt-jsonlint' );
15         grunt.loadNpmTasks( 'grunt-karma' );
16         grunt.loadNpmTasks( 'grunt-stylelint' );
17         grunt.loadNpmTasks( 'grunt-webdriver' );
19         karmaProxy[ wgScriptPath ] = {
20                 target: wgServer + wgScriptPath,
21                 changeOrigin: true
22         };
24         if ( process.env.JENKINS_HOME ) {
25                 WebdriverIOconfigFile = './tests/selenium/wdio.conf.jenkins.js';
26         } else {
27                 WebdriverIOconfigFile = './tests/selenium/wdio.conf.js';
28         }
30         grunt.initConfig( {
31                 eslint: {
32                         all: [
33                                 '**/*.js',
34                                 '!docs/**',
35                                 '!node_modules/**',
36                                 '!resources/lib/**',
37                                 '!resources/src/jquery.tipsy/**',
38                                 '!resources/src/jquery/jquery.farbtastic.js',
39                                 '!resources/src/mediawiki.libs/**',
40                                 // Third-party code of PHPUnit coverage report
41                                 '!tests/coverage/**',
42                                 '!vendor/**',
43                                 // Explicitly say "**/*.js" here in case of symlinks
44                                 '!extensions/**/*.js',
45                                 '!skins/**/*.js',
46                                 // Skip functions aren't even parseable
47                                 '!resources/src/dom-level2-skip.js',
48                                 '!resources/src/es5-skip.js',
49                                 '!resources/src/mediawiki.hidpi-skip.js'
50                         ]
51                 },
52                 jsonlint: {
53                         all: [
54                                 '**/*.json',
55                                 '!{docs/js,extensions,node_modules,skins,vendor}/**'
56                         ]
57                 },
58                 banana: {
59                         options: {
60                                 disallowBlankTranslations: false
61                         },
62                         core: 'languages/i18n/',
63                         api: 'includes/api/i18n/',
64                         installer: 'includes/installer/i18n/'
65                 },
66                 stylelint: {
67                         options: {
68                                 syntax: 'less'
69                         },
70                         src: '{resources/src,mw-config}/**/*.{css,less}'
71                 },
72                 watch: {
73                         files: [
74                                 '.{stylelintrc,eslintrc.json}',
75                                 '**/*',
76                                 '!{docs,extensions,node_modules,skins,vendor}/**'
77                         ],
78                         tasks: 'test'
79                 },
80                 karma: {
81                         options: {
82                                 proxies: karmaProxy,
83                                 files: [ {
84                                         pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
85                                         watched: false,
86                                         included: true,
87                                         served: false
88                                 } ],
89                                 logLevel: 'DEBUG',
90                                 frameworks: [ 'qunit' ],
91                                 reporters: [ 'progress' ],
92                                 singleRun: true,
93                                 autoWatch: false,
94                                 // Some tests in extensions don't yield for more than the default 10s (T89075)
95                                 browserNoActivityTimeout: 60 * 1000
96                         },
97                         main: {
98                                 browsers: [ 'Chrome' ]
99                         },
100                         chromium: {
101                                 browsers: [ 'Chromium' ]
102                         },
103                         more: {
104                                 browsers: [ 'Chrome', 'Firefox' ]
105                         }
106                 },
107                 copy: {
108                         jsduck: {
109                                 src: 'resources/**/*',
110                                 dest: 'docs/js/modules',
111                                 expand: true,
112                                 rename: function ( dest, src ) {
113                                         return require( 'path' ).join( dest, src.replace( 'resources/', '' ) );
114                                 }
115                         }
116                 },
118                 // Configure WebdriverIO task
119                 webdriver: {
120                         test: {
121                                 configFile: WebdriverIOconfigFile
122                         }
123                 }
125         } );
127         grunt.registerTask( 'assert-mw-env', function () {
128                 if ( !process.env.MW_SERVER ) {
129                         grunt.log.error( 'Environment variable MW_SERVER must be set.\n' +
130                                 'Set this like $wgServer, e.g. "http://localhost"'
131                         );
132                 }
133                 if ( !process.env.MW_SCRIPT_PATH ) {
134                         grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
135                                 'Set this like $wgScriptPath, e.g. "/w"' );
136                 }
137                 return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
138         } );
140         grunt.registerTask( 'lint', [ 'eslint', 'banana', 'stylelint' ] );
141         grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
143         grunt.registerTask( 'test', [ 'lint' ] );
144         grunt.registerTask( 'default', 'test' );