mail/Gruntfile.js

338 lines
11 KiB
JavaScript
Raw Normal View History

2013-05-21 09:38:18 -04:00
module.exports = function(grunt) {
2013-08-09 11:23:38 -04:00
'use strict';
2013-05-21 09:38:18 -04:00
var version = grunt.option('release'),
zipName = (version) ? version : 'DEV';
2013-11-12 14:02:46 -05:00
2013-08-09 11:23:38 -04:00
// Project configuration.
grunt.initConfig({
connect: {
dev: {
options: {
port: 8580,
base: '.',
keepalive: true
}
},
test: {
options: {
port: 8581,
base: '.'
}
},
prod: {
options: {
port: process.env.PORT || 8585,
2013-09-27 10:17:38 -04:00
base: './dist/',
2013-08-09 11:23:38 -04:00
keepalive: true,
middleware: function(connect, options) {
// Return array of whatever middlewares you want
2013-09-27 10:17:38 -04:00
return [
2014-06-11 03:42:34 -04:00
2013-09-27 10:17:38 -04:00
function(req, res, next) {
2013-11-17 10:34:53 -05:00
res.setHeader('Content-Security-Policy', "default-src 'self'; object-src 'none'; connect-src 'self' https://keys.whiteout.io; img-src 'self' data:;");
2013-05-22 04:16:26 -04:00
2013-08-09 11:23:38 -04:00
return next();
},
2013-05-22 04:16:26 -04:00
2013-08-09 11:23:38 -04:00
// Serve static files.
2013-09-27 10:17:38 -04:00
connect.static(options.base)
];
2013-08-09 11:23:38 -04:00
}
}
}
},
2013-05-22 04:16:26 -04:00
2013-08-09 11:23:38 -04:00
jshint: {
2014-06-05 09:36:53 -04:00
all: ['Gruntfile.js', 'src/*.js', 'src/js/**/*.js', 'test/unit/*.js', 'test/integration/*.js'],
2013-08-09 11:23:38 -04:00
options: {
jshintrc: '.jshintrc'
}
},
2013-05-22 04:16:26 -04:00
mocha: {
all: {
options: {
2014-06-11 03:42:34 -04:00
urls: [
2014-06-05 09:36:53 -04:00
'http://localhost:<%= connect.test.options.port %>/test/unit/index.html',
2014-06-11 03:42:34 -04:00
'http://localhost:<%= connect.test.options.port %>/test/integration/index.html'
],
run: false,
2014-06-11 03:42:34 -04:00
reporter: 'Spec',
log: false,
// phanotmjs is soooo slow
timeout: 100000
}
}
2013-09-16 13:46:04 -04:00
},
clean: {
dist: ['dist', 'src/lib/*.js', 'test/lib', 'test/integration/src']
2013-09-16 13:46:04 -04:00
},
sass: {
dist: {
files: {
2013-10-22 12:26:30 -04:00
'src/css/all.css': 'src/sass/all.scss'
2013-09-16 13:46:04 -04:00
}
}
},
autoprefixer: {
options: {
browsers: ['last 2 versions']
},
dist: {
files: {
2013-10-22 12:26:30 -04:00
'src/css/all.css': 'src/css/all.css'
2013-09-16 13:46:04 -04:00
}
}
},
csso: {
options: {
2013-10-22 12:57:21 -04:00
banner: '/*! Copyright © 2013, Whiteout Networks GmbH. All rights reserved.*/\n'
2013-09-16 13:46:04 -04:00
},
dist: {
files: {
2013-10-22 12:26:30 -04:00
'dist/css/all.min.css': 'src/css/all.css'
2013-09-16 13:46:04 -04:00
}
}
},
watch: {
css: {
files: ['src/sass/**/*.scss'],
tasks: ['dist-css']
2013-09-17 07:04:41 -04:00
},
js: {
files: ['src/js/**/*.js'],
tasks: ['copy:js']
},
lib: {
files: ['src/lib/**/*.js'],
tasks: ['copy:lib']
},
app: {
files: ['src/*.js', 'src/**/*.html', 'src/**/*.json', 'src/img/**/*', 'src/font/**/*'],
2013-11-14 11:41:31 -05:00
tasks: ['copy:app', 'copy:ca', 'copy:tpl', 'copy:img', 'copy:font', 'manifest-dev']
2013-09-16 13:46:04 -04:00
}
},
copy: {
npm: {
2013-09-16 13:46:04 -04:00
expand: true,
flatten: true,
2013-09-17 11:34:40 -04:00
cwd: 'node_modules/',
2013-09-19 12:35:12 -04:00
src: [
'requirejs/require.js',
2013-09-19 12:35:12 -04:00
'imap-client/src/*.js',
2014-04-17 09:13:18 -04:00
'imap-client/node_modules/browserbox/src/*.js',
'imap-client/node_modules/browserbox/node_modules/imap-handler/src/*.js',
'imap-client/node_modules/browserbox/node_modules/mimefuncs/src/*.js',
'imap-client/node_modules/browserbox/node_modules/tcp-socket/src/*.js',
'imap-client/node_modules/browserbox/node_modules/utf7/src/*.js',
2014-02-25 13:18:37 -05:00
'mailreader/src/*.js',
2014-04-17 09:13:18 -04:00
'mailreader/node_modules/mimeparser/src/*.js',
'mailreader/node_modules/mimeparser/node_modules/addressparser/src/*.js',
2014-04-22 12:19:28 -04:00
'pgpbuilder/src/*.js',
'pgpbuilder/node_modules/mailbuild/src/*.js',
'pgpbuilder/node_modules/mailbuild/node_modules/mimetypes/src/*.js',
'pgpbuilder/node_modules/mailbuild/node_modules/punycode/punycode.min.js',
'pgpmailer/src/*.js',
'pgpmailer/node_modules/smtpclient/src/*.js',
'pgpmailer/node_modules/smtpclient/node_modules/stringencoding/dist/stringencoding.js',
'axe/axe.js'
2013-09-19 12:35:12 -04:00
],
dest: 'src/lib/'
2013-09-16 13:46:04 -04:00
},
npmDev: {
2013-09-16 13:46:04 -04:00
expand: true,
flatten: true,
2013-09-17 11:34:40 -04:00
cwd: 'node_modules/',
2014-06-11 03:42:34 -04:00
src: ['requirejs/require.js', 'mocha/mocha.css', 'mocha/mocha.js', 'chai/chai.js', 'sinon/pkg/sinon.js', 'angularjs/src/ngMock/angular-mocks.js', 'browsercrow/src/*.js', 'browsersmtp/src/*.js'],
dest: 'test/lib/'
},
cryptoLib: {
expand: true,
2013-09-17 11:34:40 -04:00
cwd: 'node_modules/crypto-lib/src/',
src: ['*.js'],
dest: 'src/js/crypto/'
},
lib: {
expand: true,
2013-09-17 11:34:40 -04:00
cwd: 'src/lib/',
src: ['**'],
dest: 'dist/lib/'
2013-09-16 13:46:04 -04:00
},
js: {
expand: true,
2013-09-17 11:34:40 -04:00
cwd: 'src/js/',
src: ['**'],
2013-09-16 13:46:04 -04:00
dest: 'dist/js/'
},
font: {
2013-09-16 13:46:04 -04:00
expand: true,
2013-09-17 11:34:40 -04:00
cwd: 'src/font/',
src: ['*'],
dest: 'dist/font/'
2013-09-16 13:46:04 -04:00
},
img: {
2013-09-16 13:46:04 -04:00
expand: true,
2013-09-17 11:34:40 -04:00
cwd: 'src/img/',
src: ['*'],
dest: 'dist/img/'
},
tpl: {
expand: true,
2013-09-17 11:34:40 -04:00
cwd: 'src/tpl/',
src: ['*'],
dest: 'dist/tpl/'
2013-09-16 13:46:04 -04:00
},
2013-11-14 11:41:31 -05:00
ca: {
expand: true,
cwd: 'src/ca/',
src: ['*'],
dest: 'dist/ca/'
},
2013-09-16 13:46:04 -04:00
app: {
expand: true,
2013-09-17 11:34:40 -04:00
cwd: 'src/',
src: ['*.html', '*.js', '*.json'],
2013-09-16 13:46:04 -04:00
dest: 'dist/'
},
integration: {
expand: true,
cwd: 'src/',
src: ['**'],
dest: 'test/integration/src/'
2013-09-16 13:46:04 -04:00
}
2013-11-12 14:02:46 -05:00
},
2014-03-02 17:50:16 -05:00
2013-11-12 14:02:46 -05:00
compress: {
2014-03-03 07:00:26 -05:00
main: {
2013-11-12 14:02:46 -05:00
options: {
mode: 'zip',
2014-03-03 07:00:26 -05:00
archive: 'release/whiteout-mail_' + zipName + '.zip'
2013-11-12 14:02:46 -05:00
},
expand: true,
cwd: 'dist/',
src: ['**/*'],
dest: 'release/'
},
nodeWebkit: {
options: {
mode: 'zip',
archive: 'release/whiteout-mail_' + zipName + '.nw'
},
expand: true,
cwd: 'dist/',
src: ['**/*'],
dest: '/'
2013-11-12 14:02:46 -05:00
}
2014-03-02 17:50:16 -05:00
},
nodewebkit: {
options: {
version: '0.9.2', // node-webkit version
2014-03-03 07:00:26 -05:00
build_dir: './release/node-webkit/', // Where the build version of my node-webkit app is saved
2014-03-02 17:50:16 -05:00
mac: true, // We want to build it for mac
win: false, // We want to build it for win
linux32: false, // We don't need linux32
linux64: false, // We don't need linux64
},
src: ['./dist/**/*'] // Your node-webkit app
},
2013-08-09 11:23:38 -04:00
});
2013-05-21 09:38:18 -04:00
2013-08-09 11:23:38 -04:00
// Load the plugin(s)
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-mocha');
2013-09-16 13:46:04 -04:00
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-csso');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-autoprefixer');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-copy');
2013-11-12 14:02:46 -05:00
grunt.loadNpmTasks('grunt-contrib-compress');
2014-03-02 17:50:16 -05:00
grunt.loadNpmTasks('grunt-node-webkit-builder');
2013-05-21 09:38:18 -04:00
2013-09-17 07:04:41 -04:00
// Build tasks
grunt.registerTask('dist-npm', ['copy:npm', 'copy:npmDev', 'copy:cryptoLib']);
2013-09-16 13:46:04 -04:00
grunt.registerTask('dist-css', ['sass', 'autoprefixer', 'csso']);
2013-09-17 07:04:41 -04:00
grunt.registerTask('dist-copy', ['copy']);
grunt.registerTask('dist', ['clean', 'dist-npm', 'dist-css', 'dist-copy']);
2013-09-16 13:46:04 -04:00
2013-09-17 07:04:41 -04:00
// Test/Dev tasks
grunt.registerTask('dev', ['connect:dev']);
grunt.registerTask('test', ['jshint', 'connect:test', 'mocha']);
2013-09-17 07:04:41 -04:00
grunt.registerTask('prod', ['connect:prod']);
2013-11-12 14:02:46 -05:00
//
// Release tasks for Chrome App Release Channels
//
grunt.registerTask('manifest-dev', function() {
patchManifest({
suffix: ' (DEV)',
version: '9999.9999.9999.9999'
2013-11-12 14:02:46 -05:00
});
});
grunt.registerTask('manifest-test', function() {
if (!version) {
throw new Error('You must specify the version: "--release=1.0"');
}
2013-11-12 14:02:46 -05:00
patchManifest({
suffix: ' (TEST)',
client_id: '440907777130-bfpgo5fbo4f7hetrg3hn57qolrtubs0u.apps.googleusercontent.com',
2013-11-13 07:15:44 -05:00
version: version,
deleteKey: true
2013-11-12 14:02:46 -05:00
});
});
grunt.registerTask('manifest-stable', function() {
if (!version) {
throw new Error('You must specify the version: "--release=1.0"');
}
patchManifest({
2014-05-12 11:52:04 -04:00
suffix: ' (Beta)',
2013-11-13 07:15:44 -05:00
version: version,
deleteKey: true,
keyServer: 'https://keys.whiteout.io/',
keychainServer: 'https://keychain.whiteout.io/'
});
2013-11-12 14:02:46 -05:00
});
function patchManifest(options) {
var fs = require('fs'),
path = './dist/manifest.json',
manifest = require(path);
if (options.version) {
manifest.version = options.version;
2013-11-12 14:02:46 -05:00
}
if (options.suffix) {
manifest.name += options.suffix;
}
if (options.client_id) {
manifest.oauth2.client_id = options.client_id;
}
if (options.keyServer) {
var ksIndex = manifest.permissions.indexOf('https://keys-test.whiteout.io/');
manifest.permissions[ksIndex] = options.keyServer;
}
if (options.keychainServer) {
var kcsIndex = manifest.permissions.indexOf('https://keychain-test.whiteout.io/');
manifest.permissions[kcsIndex] = options.keychainServer;
}
2013-11-13 07:15:44 -05:00
if (options.deleteKey) {
delete manifest.key;
}
2013-11-12 14:02:46 -05:00
fs.writeFileSync(path, JSON.stringify(manifest, null, 2));
}
grunt.registerTask('release-dev', ['dist', 'manifest-dev', 'compress']);
grunt.registerTask('release-test', ['dist', 'manifest-test', 'compress']);
grunt.registerTask('release-stable', ['dist', 'manifest-stable', 'compress']);
grunt.registerTask('default', ['release-dev']);
2013-11-12 14:02:46 -05:00
2013-05-21 09:38:18 -04:00
};