themouette/fossil-core

View on GitHub
Gruntfile.js

Summary

Maintainability
C
1 day
Test Coverage
/* jshint node: true */
module.exports = function(grunt) {
  "use strict";

  var versions = {
    firefox: 25,
    chrome: 30
  };
  var browsers = [{
/*    browserName: 'firefox',
    platform: 'Windows 8.1',
    version: versions.firefox
  }, {
    browserName: 'firefox',
    platform: 'Windows 8',
    version: versions.firefox
  }, {
    browserName: 'firefox',
    platform: 'Windows 7',
    version: versions.firefox
  }, {
    browserName: 'firefox',
    platform: 'Linux',
    version: versions.firefox
  }, {*/
    browserName: 'chrome',
    platform: 'Windows 8.1',
    version: versions.chrome
  }, {
    browserName: 'chrome',
    platform: 'Windows 8',
    version: versions.chrome
  }, {
    browserName: 'chrome',
    platform: 'Windows 7',
    version: versions.chrome
  }, {
    browserName: 'chrome',
    platform: 'XP',
    version: versions.chrome
  }, {
    browserName: 'chrome',
    platform: 'linux',
    version: versions.chrome
  }, {
    browserName: 'internet explorer',
    platform: 'Windows 8.1',
    version: '11'
  }, {
    browserName: 'internet explorer',
    platform: 'Windows 8',
    version: '10'
  }, {
    browserName: 'internet explorer',
    platform: 'Windows 7',
    version: '10'
  }, {
    browserName: 'internet explorer',
    platform: 'Windows 7',
    version: '9'
  }, {
    browserName: 'opera',
    platform: 'Windows 2008',
    version: '12'
  }];

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    // list of files to be processed
    // for compilation.
    buildsrc: [
            'src/core.js',
            'src/deferred.js',
            'src/view.js',
            'src/mixins/*.js',
            'src/service.js',
            'src/application.js',
            'src/module.js',
            'src/fragment.js',
            'src/services/*.js'
        ],
    concurrent: {
        dev: {
            tasks: ['watch', 'connect:server:keepalive'],
            options: {
                logConcurrentOutput: true
            }
        }
    },
    watch: {
        src: {
            files: 'src/**/*.js',
            tasks: ['concat:library']
        }
    },
    mocha: {
        options: {
            log: true,
            ingnoreLeaks: false,
            reporter: 'Dot',
            run: true
        },

        require: {
          options: {run: false},
          src: ['tests/index.html']
        }
    },
    'saucelabs-mocha': {
        all: {
            options: {
                username: process.env.SAUCE_USERNAME || 'fossil',
                key: process.env.SAUCE_ACCESS_KEY,
                urls: ['http://127.0.0.1:8000/tests/index.html'],
                tunnelTimeout: 120,
                build: process.env.TRAVIS_JOB_ID || '<%= pkg.version %>-dev@<%= grunt.template.today() %>',
                concurrency: 3,
                browsers: browsers,
                testReadyTimeout: 1000*60,
                testname: "<%= pkg.name %> mocha tests"
            }
        }
    },
    connect: {
        server: {
            options: {
                port: 8000,
                base: '.',
                hostname: '*'
            }
        }
    },
    requirejs: {
        standalone: {
            options: {
                out: '<%= pkg.name %>.js',
                optimize: 'none',
                baseUrl: 'src/',
                include: [ 'fossil' ],
                wrap: {
                    start: 'var Fossil = (function () {',
                    end: 'return fossil;})();'
                },
                paths: {
                    'jquery': 'empty:',
                    'underscore': 'empty:',
                    'backbone': 'empty:',
                    'fossil/views/view': 'empty:',
                    'fossil/views/regionManager': 'empty:',
                    'handlebars': 'empty:'
                },
                onBuildWrite: function( name, path, contents ) {
                    return require('amdclean').clean(contents);
                }
            }
        }
    },

    concat: {
        library:{
            options: {
                banner: "var Fossil = (function (_, Backbone, jQuery) {\n",
                footer: [
                    "return Fossil;",
                    "})(_, Backbone, jQuery);"
                ].join("\n")
            },
            src: '<%= buildsrc %>',
            dest: '<%= pkg.name %>.js'
        }
    },
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      library: {
        src: '<%= pkg.name %>.js',
        dest: '<%= pkg.name %>.min.js'
      }
    },
    compress: {
        main: {
            options: {
                mode: 'gzip'
            },
            expand: true,
            src: ['<%= pkg.name %>.min.js'],
            cwd: './',
            dest: './',
            ext: '.gz.js'
        }
    },
    copy: {
        libToSamples: {
            src: ['<%= pkg.name %>.js'],
            dest: 'samples/'
        }
    },

    jshint: {
        options: {
            jshintrc: true
        },
        src: [ 'src/**/*.js' ],
        tests: [ 'tests/**/*.js' ]
    },

    docco: {
        lib: {
            src: ['src/**/*.js'],
            options: {
                output: 'doc/sources'
            }
        }
    }
  });

  // Load the plugin that provides the "uglify" task.
  grunt.loadNpmTasks('grunt-contrib-connect');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-concurrent');
  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-copy');
  grunt.loadNpmTasks('grunt-contrib-requirejs');
  grunt.loadNpmTasks('grunt-contrib-compress');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-saucelabs');
  grunt.loadNpmTasks('grunt-mocha');
  grunt.loadNpmTasks('grunt-docco');

  // Default task(s).
  grunt.registerTask('test:unit', ['mocha']);
  grunt.registerTask('test:sauce', ['connect::server', 'saucelabs-mocha']);
  var tests = ['test:unit', 'jshint'];
  if (process.env.TRAVIS_SECURE_ENV_VARS === "true") {
    tests.push('test:sauce');
  }
  grunt.registerTask('test', tests);
  grunt.registerTask('dev', ['concat:library', 'concurrent:dev']);
  grunt.registerTask('release', ['test', 'requirejs:standalone', 'uglify:library', 'compress', 'copy:libToSamples']);
  grunt.registerTask('default', ['release']);
};