]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - Gruntfile.js
MediaWiki 1.30.2-scripts2
[autoinstallsdev/mediawiki.git] / Gruntfile.js
1 /* eslint-env node */
2
3 module.exports = function ( grunt ) {
4
5         var wgServer = process.env.MW_SERVER,
6                 wgScriptPath = process.env.MW_SCRIPT_PATH,
7                 WebdriverIOconfigFile,
8                 karmaProxy = {};
9
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' );
18
19         karmaProxy[ wgScriptPath ] = {
20                 target: wgServer + wgScriptPath,
21                 changeOrigin: true
22         };
23
24         if ( process.env.JENKINS_HOME ) {
25                 WebdriverIOconfigFile = './tests/selenium/wdio.conf.jenkins.js';
26         } else {
27                 WebdriverIOconfigFile = './tests/selenium/wdio.conf.js';
28         }
29
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/mediawiki.hidpi-skip.js'
48                         ]
49                 },
50                 jsonlint: {
51                         all: [
52                                 '**/*.json',
53                                 '!{docs/js,extensions,node_modules,skins,vendor}/**'
54                         ]
55                 },
56                 banana: {
57                         options: {
58                                 disallowBlankTranslations: false
59                         },
60                         core: 'languages/i18n/',
61                         api: 'includes/api/i18n/',
62                         installer: 'includes/installer/i18n/'
63                 },
64                 stylelint: {
65                         options: {
66                                 syntax: 'less'
67                         },
68                         src: '{resources/src,mw-config}/**/*.{css,less}'
69                 },
70                 watch: {
71                         files: [
72                                 '.{stylelintrc,eslintrc.json}',
73                                 '**/*',
74                                 '!{docs,extensions,node_modules,skins,vendor}/**'
75                         ],
76                         tasks: 'test'
77                 },
78                 karma: {
79                         options: {
80                                 proxies: karmaProxy,
81                                 files: [ {
82                                         pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
83                                         watched: false,
84                                         included: true,
85                                         served: false
86                                 } ],
87                                 logLevel: 'DEBUG',
88                                 frameworks: [ 'qunit' ],
89                                 reporters: [ 'mocha' ],
90                                 singleRun: true,
91                                 autoWatch: false,
92                                 // Some tests in extensions don't yield for more than the default 10s (T89075)
93                                 browserNoActivityTimeout: 60 * 1000,
94                                 // Karma requires Same-Origin (or CORS) by default since v1.1.1
95                                 // for better stacktraces. But we load the first request from wgServer
96                                 crossOriginAttribute: false
97                         },
98                         main: {
99                                 browsers: [ 'Chrome' ]
100                         },
101                         chromium: {
102                                 browsers: [ 'Chromium' ]
103                         },
104                         more: {
105                                 browsers: [ 'Chrome', 'Firefox' ]
106                         }
107                 },
108                 copy: {
109                         jsduck: {
110                                 src: 'resources/**/*',
111                                 dest: 'docs/js/modules',
112                                 expand: true,
113                                 rename: function ( dest, src ) {
114                                         return require( 'path' ).join( dest, src.replace( 'resources/', '' ) );
115                                 }
116                         }
117                 },
118
119                 // Configure WebdriverIO task
120                 webdriver: {
121                         test: {
122                                 configFile: WebdriverIOconfigFile
123                         }
124                 }
125
126         } );
127
128         grunt.registerTask( 'assert-mw-env', function () {
129                 if ( !process.env.MW_SERVER ) {
130                         grunt.log.error( 'Environment variable MW_SERVER must be set.\n' +
131                                 'Set this like $wgServer, e.g. "http://localhost"'
132                         );
133                 }
134                 if ( !process.env.MW_SCRIPT_PATH ) {
135                         grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
136                                 'Set this like $wgScriptPath, e.g. "/w"' );
137                 }
138                 return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
139         } );
140
141         grunt.registerTask( 'lint', [ 'eslint', 'banana', 'stylelint' ] );
142         grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
143
144         grunt.registerTask( 'test', [ 'lint' ] );
145         grunt.registerTask( 'default', 'test' );
146 };