mithril-vndb/Gruntfile.js
impinball 9ae592ee4d Do some local style modifications and profile.
1. Do some temporary style modifications to help make the code more readable
   for profiling (with help from ESLint).
2. Profile the code, and optimize accordingly.
2015-07-23 05:17:02 -04:00

338 lines
7.9 KiB
JavaScript
Executable file

/* eslint-env node */
module.exports = function(grunt) {
"use strict"
var _ = require("lodash")
var version = "0.4.0"
var inputFolder = "./docs"
var tempFolder = "./temp"
var archiveFolder = "./archive"
var outputFolder = "../mithril"
var guide = [
"auto-redrawing",
"benchmarks",
"community",
"optimizing-performance",
"comparison",
"components",
"getting-started",
"installation",
"integration",
"practices",
"refactoring",
"routing",
"tools",
"web-services"
]
var api = [
"change-log",
"roadmap",
"how-to-read-signatures",
"mithril",
"mithril.computation",
"mithril.deferred",
"mithril.mount",
"mithril.component",
"mithril.prop",
"mithril.redraw",
"mithril.render",
"mithril.deps",
"mithril.request",
"mithril.route",
"mithril.sync",
"mithril.trust",
"mithril.withAttr",
"mithril.xhr"
]
var md2htmlTasks = {}
var makeTasks = function(layout, pages) {
pages.map(function(name) {
var src = inputFolder + "/" + name + ".md"
var title
if (grunt.file.exist(src)) {
title = grunt.file.read(src)
.split(/\n/)[0]
.substring(3) + " - "
} else {
title = ""
}
md2htmlTasks[name] = {
options: {
layout: inputFolder + "/layout/" + layout + ".html",
templateData: { "topic": title }
},
files: [{src: [src], dest: tempFolder + "/" + name + ".html"}]
}
})
}
makeTasks("guide", guide)
makeTasks("api", api)
var sauceBrowsers = [
{ browserName: "firefox", version: "19", platform: "XP" },
{ browserName: "internet explorer", platform: "XP", version: "6"},
{ browserName: "safari", platform: "OS X 10.9", version: "7"},
{ browserName: "iPad", platform: "OS X 10.9", version: "7.1"},
{ browserName: "opera", platform: "Linux", version: "12"},
{ browserName: "chrome", platform: "XP", version: "26"},
{ browserName: "chrome", platform: "Windows 8", version: "26"}
]
var sauceOnTestComplete = function(result, callback) {
var request = require("request")
var user = process.env.SAUCE_USERNAME
var pass = process.env.SAUCE_ACCESS_KEY
request.put({
url: [
"https://saucelabs.com/rest/v1",
user,
"jobs",
result.job_id
].join("/"),
auth: { user: user, pass: pass },
json: { passed: result.passed }
}, function (error, response) {
if (error) {
callback(error)
} else if (response.statusCode !== 200) {
callback(new Error("Unexpected response status: "
+ response.statusCode + "\n "))
} else {
callback(null, result.passed)
}
})
}
var sauceBaseOptions = {
username: process.env.SAUCE_USERNAME,
key: process.env.SAUCE_ACCESS_KEY,
testname: "Mithril Tests " + new Date().toJSON(),
browsers: sauceBrowsers,
sauceConfig: {
"record-video": false,
"record-screenshots": false
},
build: process.env.TRAVIS_JOB_ID,
onTestComplete: sauceOnTestComplete,
tunnelTimeout: 5
}
var sauceCustomOptions = {
testname: "Mithril Custom Tests " + new Date().toJSON(),
urls: ["http://127.0.0.1:8000/tests/index.html"]
}
_.assign(sauceCustomOptions, sauceBaseOptions)
var sauceQunitOptions = {
testname: "qUnit Tests " + new Date().toJSON(),
urls: ["http://127.0.0.1:8000/tests/e2e/test.html"]
}
_.assign(sauceQunitOptions, sauceBaseOptions)
var currentVersionArchiveFolder = archiveFolder + "/v" + version
grunt.initConfig({
md2html: md2htmlTasks,
uglify: {
options: {
banner: [[
"/*",
"Mithril v" + version,
"http://github.com/lhorie/mithril.js",
"(c) Leo Horie",
"License: MIT",
"*/"
].join("\n")],
sourceMap: true
},
mithril: {src: "mithril.js", dest: "mithril.min.js"}
},
concat: {
test: {
src: [
"mithril.js",
"./tests/test.js",
"./tests/mock.js",
"./tests/mithril-tests.js"
],
dest: currentVersionArchiveFolder + "/mithril-tests.js"
}
},
zip: {
distribution: {
cwd: currentVersionArchiveFolder + "/",
src: [
currentVersionArchiveFolder + "/mithril.min.js",
currentVersionArchiveFolder + "/mithril.min.js.map",
currentVersionArchiveFolder + "/mithril.js"
],
dest: currentVersionArchiveFolder + "/mithril.min.zip"
}
},
replace: {
options: {
force: true,
patterns: [
{match: /\.md/g, replacement: ".html"},
{match: /\$version/g, replacement: version}
]
},
links: {
expand: true,
flatten: true,
src: [tempFolder + "/**/*.html"],
dest: currentVersionArchiveFolder + "/"
},
index: {
src: inputFolder + "/layout/index.html",
dest: currentVersionArchiveFolder + "/index.html"
},
commonjs: {
expand: true,
flatten: true,
src: [inputFolder + "/layout/*.json"],
dest: currentVersionArchiveFolder
},
cdnjs: {
src: "deploy/cdnjs-package.json",
dest: "../cdnjs/ajax/libs/mithril/package.json"
}
},
copy: {
style: {
src: inputFolder + "/layout/style.css",
dest: currentVersionArchiveFolder + "/style.css"
},
pages: {
src: inputFolder + "/layout/pages.json",
dest: currentVersionArchiveFolder + "/pages.json"
},
lib: {
expand: true,
cwd: inputFolder + "/layout/lib/",
src: "./**",
dest: currentVersionArchiveFolder + "/lib/"
},
tools: {
expand: true,
cwd: inputFolder + "/layout/tools/",
src: "./**",
dest: currentVersionArchiveFolder + "/tools/"
},
comparisons: {
expand: true,
cwd: inputFolder + "/layout/comparisons/",
src: "./**",
dest: currentVersionArchiveFolder + "/comparisons/"
},
unminified: {
src: "mithril.js",
dest: currentVersionArchiveFolder + "/mithril.js"
},
minified: {
src: "mithril.min.js",
dest: currentVersionArchiveFolder + "/mithril.min.js"
},
readme: {
src: "README.md",
dest: currentVersionArchiveFolder + "/README.md"
},
map: {
src: "mithril.min.js.map",
dest: currentVersionArchiveFolder + "/mithril.min.js.map"
},
typescript: {
src: "mithril.d.ts",
dest: currentVersionArchiveFolder + "/mithril.d.ts"
},
publish: {
expand: true,
cwd: currentVersionArchiveFolder,
src: "./**",
dest: outputFolder
},
archive: {
expand: true,
cwd: currentVersionArchiveFolder,
src: "./**",
dest: outputFolder + "/archive/v" + version
}
},
execute: {
tests: {src: [currentVersionArchiveFolder + "/mithril-tests.js"]}
},
qunit: {
all: ["tests/e2e/**/*.html"]
},
"saucelabs-custom": {
all: {
options: sauceCustomOptions
}
},
"saucelabs-qunit": {
all: {
options: sauceQunitOptions
}
},
watch: {},
connect: {
server: {
options: {
port: 8888,
base: "."
}
}
},
clean: {
options: {force: true},
generated: [tempFolder]
},
jsfmt: {
default: {
files: [{
expand: true,
src: ["mithril.js"],
cwd: ".",
dest: "."
}]
}
},
eslint: {
target: [
"**/*.js",
"!node_modules/**",
"!**/*.min.js",
"!docs/layout/lib/**/*.js"
]
}
})
grunt.loadNpmTasks("grunt-contrib-clean")
grunt.loadNpmTasks("grunt-contrib-concat")
grunt.loadNpmTasks("grunt-contrib-copy")
grunt.loadNpmTasks("grunt-contrib-uglify")
grunt.loadNpmTasks("grunt-execute")
grunt.loadNpmTasks("grunt-md2html")
grunt.loadNpmTasks("grunt-replace")
grunt.loadNpmTasks("grunt-zip")
grunt.loadNpmTasks("grunt-contrib-qunit")
grunt.loadNpmTasks("grunt-contrib-connect")
grunt.loadNpmTasks("grunt-saucelabs")
grunt.loadNpmTasks("grunt-jsfmt")
grunt.loadNpmTasks("grunt-eslint")
grunt.registerTask("build", [
"test", "uglify", "zip", "md2html", "replace", "copy", "clean"])
grunt.registerTask("testall", ["test", "teste2e"])
grunt.registerTask("test", ["eslint", "concat", "execute"])
grunt.registerTask("teste2e", ["connect", "qunit"])
grunt.registerTask("default", ["build"])
grunt.registerTask("sauce-qunit", ["connect", "saucelabs-qunit"])
grunt.registerTask("sauce-custom", ["connect", "saucelabs-custom"])
grunt.registerTask("sauce-all", [
"connect", "saucelabs-qunit", "saucelabs-custom"])
}