123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- module.exports = function(grunt) {
- // Load all grunt modules
- require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
- // Tell our Express server that Grunt launched it
- process.env.GRUNTED = true;
- // Project configuration.
- grunt.initConfig({
- pkg: grunt.file.readJSON('package.json'),
- settings: grunt.file.readJSON('./server_config/settings.json'),
-
- font: {
- icons: {
- src: ['front/src/fonts/svg-icons/*.svg'],
- destCss: 'front/src/less/icons.less',
- destFonts: 'front/src/fonts/icons.woff',
- // Optional: Custom routing of font filepaths for CSS
- cssRouter: function (fontpath) {
- var pathArray = fontpath.split('/');
- var fileName = pathArray[pathArray.length - 1];
- return '/fonts/' + fileName;
- }
- }
- },
- less: {
- all: {
- files: [
- {
- expand: true,
- cwd: 'front/src/less/',
- src: ['**/*.less'],
- dest: 'front/src/css/',
- ext: '.css'
- }
- ]
- }
- },
- replace: {
- dist: {
- options: {
- patterns: [
- {
- match: 'googleAnalyticsId',
- replacement: '<%= settings.googleAnalyticsId %>'
- },
- {
- match: 'version',
- replacement: 'v<%= pkg.version %>'
- }
- ]
- },
- files: [
- {expand: true, flatten: true, src: ['front/src/main.html'], dest: 'front/build/'}
- ]
- }
- },
- jshint: {
- all: [
- '*.js',
- 'app/lib/*.js',
- 'bin/*.js',
- 'lib/**/*.js',
- 'app/nodeControllers/*.js',
- 'app/public/scripts/*.js',
- 'phantomas_custom/**/*.js',
- 'test/**/*.js',
- 'front/src/js/**/*.js'
- ]
- },
- clean: {
- tmp: {
- src: ['.tmp']
- },
- dev: {
- src: ['front/src/css']
- },
- coverage: {
- src: ['.tmp', 'coverage/']
- },
- build: {
- src: ['front/build']
- }
- },
- copy: {
- beforeCoverage: {
- files: [
- {src: ['bin/server.js'], dest: '.tmp/'}
- ]
- },
- coverage: {
- files: [
- {src: ['test/**'], dest: 'coverage/'},
- {src: ['lib/metadata/**'], dest: 'coverage/'},
- {src: ['node_modules/phantomas/**'], dest: 'coverage/'},
- {src: ['lib/tools/phantomas/custom_modules/**'], dest: 'coverage/'}
- ]
- },
- build: {
- files: [
- {src: ['./front/src/fonts/icons.woff'], dest: './front/build/fonts/icons.woff'},
- {src: ['./front/src/img/favicon.png'], dest: './front/build/img/favicon.png'},
- {src: ['./front/src/img/logo-large.png'], dest: './front/build/img/logo-large.png'},
- ]
- }
- },
- lineremover: {
- beforeCoverage: {
- files: {
- '.tmp/bin/cli.js': 'bin/cli.js'
- },
- options: {
- exclusionPattern: /#!\/usr\/bin\/env node/
- }
- }
- },
- blanket: {
- coverageApp: {
- src: ['app/'],
- dest: 'coverage/app/'
- },
- coverageLib: {
- src: ['lib/'],
- dest: 'coverage/lib/'
- },
- coverageBin: {
- src: ['.tmp/bin/'],
- dest: 'coverage/bin/'
- }
- },
- mochaTest: {
- test: {
- options: {
- reporter: 'spec',
- },
- src: ['coverage/test/core/*.js', 'coverage/test/api/*.js']
- },
- 'test-current-work': {
- options: {
- reporter: 'spec',
- },
- src: ['test/core/offendersHelpersTest.js']
- },
- coverage: {
- options: {
- reporter: 'html-cov',
- quiet: true,
- captureFile: 'coverage/coverage.html'
- },
- src: ['coverage/test/core/*.js', 'coverage/test/api/*.js']
- }
- },
- env: {
- dev: {
- NODE_ENV: 'development'
- },
- builded: {
- NODE_ENV: 'production'
- }
- },
- express: {
- dev: {
- options: {
- port: 8383,
- server: './bin/server.js',
- serverreload: true,
- showStack: true
- }
- },
- builded: {
- options: {
- port: 8383,
- server: './bin/server.js',
- serverreload: true,
- showStack: true
- }
- },
- test: {
- options: {
- port: 8387,
- server: './coverage/bin/server.js',
- showStack: true
- }
- },
- 'test-current-work': {
- options: {
- port: 8387,
- server: './bin/server.js',
- showStack: true
- }
- },
- testSuite: {
- options: {
- port: 8388,
- bases: 'test/www'
- }
- }
- },
- useminPrepare: {
- html: './front/src/main.html',
- options: {
- dest: './front/build',
- root: ['./', './front/src']
- }
- },
- usemin: {
- html: './front/build/main.html',
- css: './front/build/css/*.css',
- options: {
- assetsDirs: ['front/build'],
- patterns: {
- css: [[/(\/fonts\/icons\.woff)/gm, 'Replacing reference to icons.woff']]
- }
- }
- },
- htmlmin: {
- options: {
- removeComments: true,
- collapseWhitespace: true
- },
- main: {
- files: [{
- expand: true,
- cwd: './front/build/',
- src: 'main.html',
- flatten: true,
- dest: './front/build'
- }]
- },
- views: {
- files: [{
- expand: true,
- cwd: './front/src/views',
- src: '*.html',
- flatten: true,
- dest: '.tmp/views/'
- }]
- }
- },
- inline_angular_templates: {
- build: {
- options: {
- base: '.tmp',
- method: 'append'
- },
- files: {
- './front/build/main.html': ['.tmp/views/*.html']
- }
- }
- },
- filerev: {
- options: {
- algorithm: 'md5',
- length: 8
- },
- assets: {
- src: './front/build/*/*.*'
- }
- }
- });
- // Custom task: copies the test settings.json file to the coverage folder, and checks if there's no missing fields
- grunt.registerTask('copy-test-server-settings', function() {
- var mainSettingsFile = './server_config/settings.json';
- var testSettingsFile = './test/fixtures/settings.json';
- var mainSettings = grunt.file.readJSON(mainSettingsFile);
- var testSettings = grunt.file.readJSON(testSettingsFile);
- // Recursively compare keys of two objects (not the values)
- function compareKeys(original, copy, context) {
- for (var key in original) {
- if (!copy[key] && copy[key] !== '' && copy[key] !== 0) {
- grunt.fail.warn('Settings file ' + testSettingsFile + ' doesn\'t contain key ' + context + '.' + key);
- }
- if (original[key] !== null && typeof original[key] === 'object') {
- compareKeys(original[key], copy[key], context + '.' + key);
- }
- }
- }
- compareKeys(mainSettings, testSettings, 'settings');
- var outputFile = './coverage/server_config/settings.json';
- grunt.file.write(outputFile, JSON.stringify(testSettings, null, 4));
- grunt.log.ok('File ' + outputFile + ' created');
- });
- grunt.registerTask('icons', [
- 'font:icons',
- 'less',
- 'clean:tmp'
- ]);
- grunt.registerTask('build', [
- 'jshint',
- 'clean:build',
- 'copy:build',
- 'less',
- 'useminPrepare',
- 'concat',
- 'uglify',
- 'cssmin',
- 'replace',
- 'htmlmin:views',
- 'inline_angular_templates',
- 'filerev',
- 'usemin',
- 'htmlmin:main',
- 'clean:tmp'
- ]);
- grunt.registerTask('hint', [
- 'jshint'
- ]);
- grunt.registerTask('dev', [
- 'env:dev',
- 'express:dev'
- ]);
- grunt.registerTask('builded', [
- 'env:builded',
- 'express:builded'
- ]);
- grunt.registerTask('test', [
- 'build',
- 'express:testSuite',
- 'clean:coverage',
- 'copy-test-server-settings',
- 'lineremover:beforeCoverage',
- 'copy:beforeCoverage',
- 'blanket',
- 'copy:coverage',
- 'express:test',
- 'mochaTest:test',
- 'mochaTest:coverage',
- 'clean:tmp'
- ]);
- grunt.registerTask('test-current-work', [
- 'jshint',
- 'express:testSuite',
- 'clean:coverage',
- 'copy-test-server-settings',
- 'express:test-current-work',
- 'mochaTest:test-current-work',
- 'clean:tmp'
- ]);
- };
|