Gruntfile.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*jshint node:true */
  2. module.exports = function ( grunt ) {
  3. grunt.loadNpmTasks( 'grunt-contrib-copy' );
  4. grunt.loadNpmTasks( 'grunt-contrib-jshint' );
  5. grunt.loadNpmTasks( 'grunt-contrib-watch' );
  6. grunt.loadNpmTasks( 'grunt-banana-checker' );
  7. grunt.loadNpmTasks( 'grunt-jscs' );
  8. grunt.loadNpmTasks( 'grunt-jsonlint' );
  9. grunt.loadNpmTasks( 'grunt-karma' );
  10. var wgServer = process.env.MW_SERVER,
  11. wgScriptPath = process.env.MW_SCRIPT_PATH,
  12. karmaProxy = {};
  13. karmaProxy[ wgScriptPath ] = wgServer + wgScriptPath;
  14. grunt.initConfig( {
  15. jshint: {
  16. options: {
  17. jshintrc: true
  18. },
  19. all: '.'
  20. },
  21. jscs: {
  22. all: '.'
  23. },
  24. jsonlint: {
  25. all: [
  26. '.jscsrc',
  27. '**/*.json',
  28. '!{docs/js,extensions,node_modules,skins,vendor}/**'
  29. ]
  30. },
  31. banana: {
  32. options: {
  33. disallowBlankTranslations: false
  34. },
  35. core: 'languages/i18n/',
  36. api: 'includes/api/i18n/',
  37. installer: 'includes/installer/i18n/'
  38. },
  39. watch: {
  40. files: [
  41. '.js*',
  42. '**/*',
  43. '!{docs,extensions,node_modules,skins,vendor}/**'
  44. ],
  45. tasks: 'test'
  46. },
  47. karma: {
  48. options: {
  49. proxies: karmaProxy,
  50. files: [ {
  51. pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
  52. watched: false,
  53. included: true,
  54. served: false
  55. } ],
  56. logLevel: 'DEBUG',
  57. frameworks: [ 'qunit' ],
  58. reporters: [ 'progress' ],
  59. singleRun: true,
  60. autoWatch: false,
  61. // Some tests in extensions don't yield for more than the default 10s (T89075)
  62. browserNoActivityTimeout: 60 * 1000
  63. },
  64. main: {
  65. browsers: [ 'Chrome' ]
  66. },
  67. more: {
  68. browsers: [ 'Chrome', 'Firefox' ]
  69. }
  70. },
  71. copy: {
  72. jsduck: {
  73. src: 'resources/**/*',
  74. dest: 'docs/js/modules',
  75. expand: true,
  76. rename: function ( dest, src ) {
  77. return require( 'path' ).join( dest, src.replace( 'resources/', '' ) );
  78. }
  79. }
  80. }
  81. } );
  82. grunt.registerTask( 'assert-mw-env', function () {
  83. if ( !process.env.MW_SERVER ) {
  84. grunt.log.error( 'Environment variable MW_SERVER must be set.\n' +
  85. 'Set this like $wgServer, e.g. "http://localhost"'
  86. );
  87. }
  88. if ( !process.env.MW_SCRIPT_PATH ) {
  89. grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
  90. 'Set this like $wgScriptPath, e.g. "/w"' );
  91. }
  92. return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
  93. } );
  94. grunt.registerTask( 'lint', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] );
  95. grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
  96. grunt.registerTask( 'test', [ 'lint' ] );
  97. grunt.registerTask( 'default', 'test' );
  98. };