| /*! |
| * Grunt file |
| * |
| * @package VisualEditor |
| */ |
| |
| 'use strict'; |
| |
| module.exports = function ( grunt ) { |
| const conf = grunt.file.readJSON( 'extension.json' ), |
| screenshotOptions = { |
| reporter: 'spec', |
| // TODO: Work out how to catch this timeout and continue. |
| // For now just make it very long. |
| timeout: 5 * 60 * 1000, |
| require: [ |
| function () { |
| global.langs = [ grunt.option( 'lang' ) || 'en' ]; |
| } |
| ] |
| }, |
| screenshotOptionsAll = { |
| reporter: 'spec', |
| // TODO: Work out how to catch this timeout and continue. |
| // For now just make it very long. |
| timeout: 5 * 60 * 1000, |
| require: [ |
| function () { |
| global.langs = require( './build/tasks/screenshotLangs.json' ).langs; |
| } |
| ] |
| }; |
| |
| grunt.loadNpmTasks( 'grunt-banana-checker' ); |
| grunt.loadNpmTasks( 'grunt-contrib-watch' ); |
| grunt.loadNpmTasks( 'grunt-eslint' ); |
| grunt.loadNpmTasks( 'grunt-image' ); |
| grunt.loadNpmTasks( 'grunt-mocha-test' ); |
| grunt.loadNpmTasks( 'grunt-stylelint' ); |
| grunt.loadNpmTasks( 'grunt-tyops' ); |
| grunt.loadTasks( 'lib/ve/build/tasks' ); |
| grunt.loadTasks( 'build/tasks' ); |
| |
| grunt.initConfig( { |
| mochaTest: { |
| 'screenshots-en': { |
| options: screenshotOptions, |
| src: [ 'build/screenshots.userGuide.js' ] |
| }, |
| 'screenshots-all': { |
| options: screenshotOptionsAll, |
| src: [ 'build/screenshots.userGuide.js' ] |
| }, |
| 'diff-screenshots-en': { |
| options: screenshotOptions, |
| src: [ 'build/screenshots.diffs.js' ] |
| }, |
| 'diff-screenshots-all': { |
| options: screenshotOptionsAll, |
| src: [ 'build/screenshots.diffs.js' ] |
| } |
| }, |
| image: { |
| pngs: { |
| options: { |
| zopflipng: true, |
| pngout: true, |
| optipng: true, |
| advpng: true, |
| pngcrush: true |
| }, |
| 'screenshots-en': { |
| expand: true, |
| src: 'screenshots/*-en.png' |
| }, |
| 'screenshots-all': { |
| expand: true, |
| src: 'screenshots/*.png' |
| } |
| }, |
| svgs: { |
| options: { |
| svgo: [ |
| '--pretty', |
| '--enable=removeRasterImages', |
| '--enable=sortAttrs', |
| '--disable=cleanupIDs', |
| '--disable=removeDesc', |
| '--disable=removeTitle', |
| '--disable=removeViewBox', |
| '--disable=removeXMLProcInst' |
| ] |
| }, |
| expand: true, |
| src: 'images/*.svg' |
| } |
| }, |
| tyops: { |
| options: { |
| typos: 'build/typos.json' |
| }, |
| src: [ |
| '**/*.{js,json,less,css,txt,php,md,sh}', |
| '!package-lock.json', |
| '!build/typos.json', |
| '!**/i18n/**/*.json', |
| '**/i18n/**/en.json', |
| '**/i18n/**/qqq.json', |
| '!lib/**', |
| '!{docs,node_modules,vendor}/**', |
| '!.git/**' |
| ] |
| }, |
| eslint: { |
| options: { |
| cache: true, |
| fix: grunt.option( 'fix' ) |
| }, |
| all: [ '.' ] |
| }, |
| stylelint: { |
| options: { |
| reportNeedlessDisables: true |
| }, |
| all: [ |
| '**/*.{css,less}', |
| '!coverage/**', |
| '!dist/**', |
| '!docs/**', |
| '!lib/**', |
| '!node_modules/**', |
| '!vendor/**' |
| ] |
| }, |
| banana: conf.MessagesDirs, |
| watch: { |
| files: [ |
| '.{stylelintrc,eslintrc}.json', |
| '<%= eslint.all %>', |
| '<%= stylelint.all %>' |
| ], |
| tasks: 'test' |
| } |
| } ); |
| |
| grunt.registerTask( 'git-status', function () { |
| const done = this.async(); |
| // Are there unstaged changes? |
| require( 'child_process' ).exec( 'git ls-files --modified', ( err, stdout, stderr ) => { |
| const ret = err || stderr || stdout; |
| if ( ret ) { |
| grunt.log.error( 'Unstaged changes in these files:' ); |
| grunt.log.error( ret ); |
| // Show a condensed diff |
| require( 'child_process' ).exec( 'git diff -U1 | tail -n +3', ( err2, stdout2, stderr2 ) => { |
| grunt.log.write( err2 || stderr2 || stdout2 ); |
| done( false ); |
| } ); |
| } else { |
| grunt.log.ok( 'No unstaged changes.' ); |
| done(); |
| } |
| } ); |
| } ); |
| |
| grunt.registerTask( 'test', [ 'tyops', 'eslint', 'stylelint', 'banana' ] ); |
| grunt.registerTask( 'test-ci', [ 'git-status' ] ); |
| grunt.registerTask( 'screenshots', [ 'mochaTest:screenshots-en', 'image:pngs' ] ); |
| grunt.registerTask( 'screenshots-all', [ 'mochaTest:screenshots-all', 'image:pngs' ] ); |
| grunt.registerTask( 'default', 'test' ); |
| |
| if ( process.env.JENKINS_HOME ) { |
| grunt.renameTask( 'test', 'test-internal' ); |
| grunt.registerTask( 'test', [ 'test-internal', 'test-ci' ] ); |
| } else { |
| grunt.registerTask( 'ci', [ 'test', 'image:svgs', 'test-ci' ] ); |
| } |
| }; |