Merge "Expose LinkRenderer for LogFormatter instances"
[lhc/web/wiklou.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/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: [ 'mocha' ],
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 // Karma requires Same-Origin (or CORS) by default since v1.1.1
97 // for better stacktraces. But we load the first request from wgServer
98 crossOriginAttribute: false
99 },
100 main: {
101 browsers: [ 'Chrome' ]
102 },
103 chromium: {
104 browsers: [ 'Chromium' ]
105 },
106 more: {
107 browsers: [ 'Chrome', 'Firefox' ]
108 }
109 },
110 copy: {
111 jsduck: {
112 src: 'resources/**/*',
113 dest: 'docs/js/modules',
114 expand: true,
115 rename: function ( dest, src ) {
116 return require( 'path' ).join( dest, src.replace( 'resources/', '' ) );
117 }
118 }
119 },
120
121 // Configure WebdriverIO task
122 webdriver: {
123 test: {
124 configFile: WebdriverIOconfigFile
125 }
126 }
127
128 } );
129
130 grunt.registerTask( 'assert-mw-env', function () {
131 if ( !process.env.MW_SERVER ) {
132 grunt.log.error( 'Environment variable MW_SERVER must be set.\n' +
133 'Set this like $wgServer, e.g. "http://localhost"'
134 );
135 }
136 if ( !process.env.MW_SCRIPT_PATH ) {
137 grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
138 'Set this like $wgScriptPath, e.g. "/w"' );
139 }
140 return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
141 } );
142
143 grunt.registerTask( 'lint', [ 'eslint', 'banana', 'stylelint' ] );
144 grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
145
146 grunt.registerTask( 'test', [ 'lint' ] );
147 grunt.registerTask( 'default', 'test' );
148 };