UNPKG

qiprofile

Version:

Quantitative Imaging Profile ( QiPr) web application

333 lines (286 loc) 10.2 kB
module.exports = (grunt) -> grunt.config.init( pkg: grunt.file.readJSON('package.json') env: dev: NODE_ENV: 'development' prod: NODE_ENV: 'production' preprocess: # Note: This 'preprocess' task is actually used to post-process # the Javascript in place after it is compiled from CoffeeScript. js: src: '_public/javascripts/config.js' options: inline: true clean: # Note: Grunt 0.4.5 file.js has an invalid test for whether the # target is contained in the cwd. Work-around is the force option. derived: ['_build', '_public/*'] options: force: true copy: bower: expand: true flatten: true cwd: 'bower_components/' src: [ 'angular/angular.js' 'angular-animate/angular-animate.js' 'angular-bootstrap/ui-bootstrap-tpls.js' 'angular-dc/dist/angular-dc.js' 'angular-resource/angular-resource.js' 'angular-route/angular-route.js' 'angular-sanitize/angular-sanitize.js' 'angular-ui-router/release/angular-ui-router.js' 'angular-nvd3/dist/angular-nvd3.js' 'cornerstone/dist/cornerstone.js' 'crossfilter/crossfilter.js' 'd3/d3.js' 'dcjs/dc.js' 'domready/ready.js' 'error-stack-parser/dist/error-stack-parser.js' 'eventEmitter/EventEmitter.js' 'lodash/lodash.js' 'moment/moment.js' 'nouislider/distribute/nouislider.js' 'nvd3/build/nv.d3.js' 'pako/dist/pako_inflate.js' 'requirejs/require.js' 'source-map/dist/source-map.js' 'spin.js/spin.js' 'sprintf/src/sprintf.js' 'stackframe/dist/stackframe.js' 'stack-generator/dist/stack-generator.js' 'stacktrace-gps/dist/stacktrace-gps.js' 'stacktrace-js/stacktrace.js' 'underscore.string/dist/underscore.string.js' ] dest: '_public/javascripts/lib' # The non-coffee app javascript files. appjs: expand: true cwd: 'app/' src: ['javascripts/*.js'] dest: '_public/' # Note: this task is only used to copy CSS map files. The # CSS style files themselves are copied to the destination # in the concat:css task. # # This task is only used to copy the Bootstrap map file. # Since the non-minimized Bootstrap module references the # CSS map, the map must be colocated with the stylesheets. cssmap: expand: true flatten: true cwd: 'bower_components/' src: ['bootstrap/dist/css/bootstrap.css.map'] dest: '_public/stylesheets/' fonts: expand: true flatten: true cwd: 'bower_components/' src: ['bootstrap/dist/fonts/*', 'font-awesome/fonts/*'] dest: '_public/fonts/' # The images and icons. static: expand: true cwd: 'static/' src: ['**'] dest: '_public/' concat: css: src: [ 'bower_components/bootstrap/dist/css/bootstrap.css' 'bower_components/cornerstone/dist/cornerstone.css' 'bower_components/dcjs/dc.css' 'bower_components/font-awesome/css/font-awesome.css' 'bower_components/nouislider/src/nouislider.css' 'bower_components/nouislider/src/nouislider.pips.css' 'bower_components/nouislider/src/nouislider.tooltips.css' 'bower_components/nvd3/build/nv.d3.css' ] dest: '_public/stylesheets/vendor.css' coffee: compile: expand: true ext: '.js' cwd: 'app/' src: ['javascripts/*.coffee'] dest: '_public/' pug: options: pretty: true compile: expand: true ext: '.html' cwd: 'app/' src: ['index.pug', 'partials/**/*.pug', '!**/include/**'] dest: '_public/' karma: options: singleRun: not grunt.option('debug') browsers: [if grunt.option('debug') then 'Chrome' else 'PhantomJS'] logLevel: [if grunt.option('debug') then 'DEBUG' else 'ERROR'] unit: configFile: 'test/conf/karma-conf.coffee' exec: # Convert CommonJS modules to AMD. convert: command: './node_modules/.bin/r.js -convert _build/commonjs _public/javascripts/lib' selenium: # If selenium is not already running, then start it. Suppress all # output, since there are no documented options to tailor the # selenium log level or log file at the command line. The selenium # server is spawned as a background process that survives the grunt # session. The command pseudo-code is as follows: # * Check for a process which listens on port 4444 # * Start the selenium server as a background process # * Suppress non-error output # # The lsof command checks whether a process (hopefully the selenium # server) is already running on port 4444. The server can be killed # by the following command: # # pkill -f selenium-standalone # # The sleep command pauses one second to allow the server to start. command: 'lsof -i :4444 >/dev/null 2>&1 || ' + '(./node_modules/selenium-standalone/bin/selenium-standalone' + ' install --silent && ' + ' ((./node_modules/selenium-standalone/bin/selenium-standalone' + ' start >/dev/null 2>&1 &) && sleep 1))' bowerinstall: command: './node_modules/.bin/bower update' bowerprune: command: './node_modules/.bin/bower prune' updatewebdriver: command: './node_modules/protractor/bin/webdriver-manager update' protractor: e2e: configFile: 'test/conf/protractor-conf.coffee' markdown: compile: expand: true ext: '.html' cwd: 'app/' src: ['partials/**/*.md'] dest: '_public/' stylus: options: use: [ require('autoprefixer-stylus') require('csso-stylus') ] compile: src: ['app/stylesheets/app.styl'] dest: '_public/stylesheets/app.css' express: options: script: 'server.js' output: 'The qiprofile server is listening' dev: options: debug: true prod: options: node_env: 'production' test: options: node_env: 'test' watch: options: livereload: true stylus: files: ['app/**/*.styl'] tasks: ['stylus'] coffee: files: ['app/**/*.coffee'] tasks: ['compile:js'] javascript: files: ['app/**/*.js'] tasks: ['copy:appjs'] pug: files: ['app/**/*.pug', 'test/**/*.pug'] tasks: ['pug'] markdown: files: ['app/partials/**/*.md'] tasks: ['markdown'] concurrent: options: logConcurrentOutput: true compile: tasks: ['compile:js', 'pug:compile', 'markdown', 'stylus'] # TODO - try this. requirejs: compile: options: appDir: "_public" baseUrl: "javascripts" dir: "_build" mainConfigFile:'_public/javascripts/config.js' # Skip the CDN modules. paths: angular: 'empty:' domReady: 'empty:' nganimate: 'empty:' ngresource: 'empty:' ngroute: 'empty:' ngsanitize: 'empty:' modules: [ name:'qiprofile' ] findNestedDependencies: true cssmin: options: 'nomunge': true 'line-break': 80 files: src: ['_public/stylesheets/app.css'] dest: '_public/stylesheets/app.min.css' ) # Load all grunt-* tasks. require('load-grunt-tasks')(grunt) # Build for development is the default. grunt.registerTask 'default', ['build:dev'] # Copy the vendor javascript. grunt.registerTask 'copy:js', ['copy:bower', 'copy:appjs'] # Assemble the app. grunt.registerTask 'copy:app', ['copy:js', 'copy:cssmap', 'copy:fonts', 'copy:static'] # Concatenate the app stylesheets. grunt.registerTask 'concat:app', ['concat:css'] # Convert vendor modules to AMD as necessary. grunt.registerTask 'amdify', ['browserify', 'exec:convert'] # Collect the vendor libraries. grunt.registerTask 'vendor:app', ['copy:app', 'concat:app'] # Compile the app javascript. grunt.registerTask 'compile:js', ['coffee:compile', 'preprocess'] # Compile the app bits concurrently. grunt.registerTask 'compile', ['concurrent:compile'] # Build the application from scratch. grunt.registerTask 'build:app', ['clean', 'vendor:app', 'compile'] # Build the app and test environment. grunt.registerTask 'build:dev', ['env:dev', 'build:app', 'exec:updatewebdriver'] # Build the app for deployment. grunt.registerTask 'build:prod', ['env:prod', 'build:app'] # The npm postinstall task. grunt.registerTask 'postinstall', ['exec:bowerinstall', 'exec:bowerprune', 'build:prod'] # Start the server with debug turned on. grunt.registerTask 'start:dev', ['express:dev', 'watch'] # Start the server in test mode. grunt.registerTask 'start:test', ['express:test', 'watch'] # Start the server in production mode. grunt.registerTask 'start:prod', ['express:prod'] # Start the server with debug by default. grunt.registerTask 'start', ['start:dev'] # Run the Karma unit tests. grunt.registerTask 'test:unit', ['karma:unit'] # Run the Protractor end-to-end tests. grunt.registerTask 'test:e2e', ['exec:selenium', 'express:test', 'protractor:e2e'] # Run all tests. grunt.registerTask 'test', ['test:unit', 'test:e2e'] # Build the application as a RequireJS AMD module. grunt.registerTask 'release', ['build:prod', 'requirejs', 'cssmin']