frontend/Gruntfile.js (170 lines of code) (raw):

module.exports = function(grunt) { var staticContentFolder = '../src/main/resources/SLING-INF/libs/sling/resource-editor/static'; var jspFolder = '../src/main/resources/SLING-INF/libs/sling/resource-editor'; var e2eTestSpecFolder = '../src/test/javascript/e2e/spec/**/*spec.js'; var server = 'localhost'; var port = '8080'; grunt.initConfig({ env : { build : { PHANTOMJS_BIN: 'node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs', SLING_SERVER: (typeof process.env.SLING_SERVER === 'undefined' || process.env.SLING_SERVER === null || '' === process.env.SLING_SERVER) ? server : process.env.SLING_SERVER, SLING_PORT: (typeof process.env.SLING_PORT === 'undefined' || process.env.SLING_PORT === null || '' === process.env.SLING_PORT) ? port : process.env.SLING_PORT } }, 'node-inspector': { custom: { options: { 'web-port': 5050, 'web-host': 'localhost', 'debug-port': 5857 } } }, less: { compileCore: { options: { strictMath: true, sourceMap: true, outputSourceFiles: true, sourceMapURL: 'bootstrap.css.map', sourceMapFilename: staticContentFolder+'/generated/css/bootstrap.css.map' }, src: '../src/main/less/reseditor.less', dest: staticContentFolder+'/generated/css/bootstrap.css' } }, watch: { less : { files : '../src/main/less/**/*.less', tasks : [ 'less' ], }, all : { files : ['../src/main/less/**/*.less', '../src/test/javascript/**/*spec.js', staticContentFolder+'/js/**/*.js', jspFolder+'/*.*' ], tasks : [ 'desktop_build' ], }, e2e : { files : ['../src/main/less/**/*.less', '../src/test/javascript/**/*spec.js', staticContentFolder+'/js/**/*.js', jspFolder+'/*.*' ], tasks : ['env:build', 'webdriver:chrome', 'webdriver:firefox'] }, karma : { files:[ staticContentFolder+'/generated/3rd_party/js/**/*.js', staticContentFolder+'/js/**/*.js', '../src/test/javascript/spec/*spec.js' ], tasks: ['karma:desktop_build'] } }, _comment:'The google web fonts could be downloaded and copied via grunt-goog-webfont-dl. But goog-webfont-dl directly points to the global #!/usr/bin/env node and not to the local one.', copy: { js_dependencies: { files: [ { expand: true, // Enable dynamic expansion. cwd: 'node_modules/', // Src matches are relative to this path. src: [ 'bootstrap/dist/js/bootstrap.min.js', 'select2/select2.min.js', 'jquery/dist/jquery.min.js', 'jquery/dist/jquery.min.map', 'bootbox/bootbox.min.js', 'jstree/dist/jstree.min.js', 'bootstrap-notify/dist/bootstrap-notify.min.js' ], // Actual pattern(s) to match. dest: staticContentFolder+'/generated/3rd_party/js', // Destination path prefix. flatten: true }, ], }, css_dependencies: { files: [ { expand: true, // Enable dynamic expansion. cwd: 'node_modules/', // Src matches are relative to this path. src: [ 'select2/select2.css', 'select2/select2.png', 'select2/select2-spinner.gif', 'animate.css/animate.min.css', 'jstree/dist/themes/default/style.min.css', 'jstree/dist/themes/default/32px.png', 'jstree/dist/themes/default/40px.png', 'jstree/dist/themes/default/throbber.gif', ], // Actual pattern(s) to match. dest: staticContentFolder+'/generated/3rd_party/css', // Destination path prefix. flatten: true }, ], }, font_dependencies: { files: [ { expand: true, // Enable dynamic expansion. cwd: 'node_modules/', // Src matches are relative to this path. src: [ 'bootstrap/fonts/glyphicons-halflings-regular.ttf', 'bootstrap/fonts/glyphicons-halflings-regular.woff2', 'bootstrap/fonts/glyphicons-halflings-regular.woff' ], // Actual pattern(s) to match. dest: staticContentFolder+'/generated/3rd_party/fonts', // Destination path prefix. flatten: true }, ], } }, karma: { options: { configFile: 'karma.conf.ci.js', }, desktop_build: { singleRun: true, browsers: ['Chrome', 'Firefox'] }, multi_run: { singleRun: false, browsers: ['Chrome', 'Firefox'] }, build: { singleRun: true, browsers: ['PhantomJS'] } }, webdriver: { options: { }, chrome: { options: { configFile: 'wdio.conf.js', specs: [e2eTestSpecFolder], // overwrite default settings desiredCapabilities: { browserName: 'chrome' } } }, firefox: { options: { configFile: 'wdio.conf.js', specs: [e2eTestSpecFolder], // overwrite default settings desiredCapabilities: { browserName: 'firefox' }, debug: true }, } } }) // These plugins provide necessary tasks. require('load-grunt-tasks')(grunt, { scope: 'devDependencies' }); grunt.registerTask('setup', ['env:build']); // grunt.registerTask('build', ['setup', 'less', 'copy', 'karma:build']); grunt.registerTask('build', ['setup', 'less', 'copy']); grunt.registerTask('default', ['build']); grunt.registerTask('desktop_build', ['setup', 'less', 'copy', 'karma:desktop_build'/* doesn't seem to work right now, 'webdriver:chrome', 'webdriver:firefox'*/]); };