mithril-vndb/Gruntfile.js

385 lines
8.1 KiB
JavaScript
Executable file

/* eslint-env node */
module.exports = function (grunt) { // eslint-disable-line
var pkg = grunt.file.readJSON("package.json")
var currentYear = grunt.template.today("yyyy")
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 = {}
function makeTasks(layout, pages) {
pages.forEach(function (name) {
var src = inputFolder + "/" + name + ".md"
var title = ""
if (grunt.file.exists(src)) {
title = grunt.file.read(src).split(/\n/)[0].substring(3) +
" - "
}
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 currentVersionArchiveFolder = archiveFolder + "/v" + pkg.version
grunt.initConfig({
// Keep this in sync with the .eslintignore
eslint: {
options: {
extensions: [".js"],
fix: true
},
all: [
"**/*.js",
"!node_modules/**",
"!**/*.min.js",
"!archive/**",
"!deploy/**",
"!mithril.closure-compiler-externs.js",
"!docs/layout/lib/**"
]
},
mocha_phantomjs: { // eslint-disable-line camelcase
test: {
src: ["test/index.html"],
options: {
reporter: "dot"
}
}
},
md2html: md2htmlTasks,
uglify: {
options: {
banner: [
"/*",
"Mithril v" + pkg.version,
pkg.homepage,
"(c) 2014-" + currentYear + " " + pkg.author.name,
"License: " + pkg.license,
"*/"
].join("\n"),
sourceMap: true
},
mithril: {src: "mithril.js", dest: "mithril.min.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: pkg.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" + pkg.version
}
},
"saucelabs-browsers": {
firefox: {
filter: function (browsers) {
return browsers.filter(function (browser) {
if (browser.browserName !== "firefox") return false
var version = browser.version
return version === "dev" || version === "beta" ||
+version >= 38 // The latest ESR version
})
}
},
chrome: {
filter: function (browsers) {
return browsers.filter(function (browser) {
if (browser.browserName !== "chrome") return false
var version = browser.version
return version === "dev" || version === "beta" ||
+version >= 41
})
}
},
ie: {
filter: function (browsers) {
return browsers.filter(function (browser) {
return browser.browserName === "internet explorer" &&
!/2003/.test(browser.platform)
})
}
},
edge: {
filter: function (browsers) {
return browsers.filter(function (browser) {
return browser.browserName === "microsoftedge"
})
}
},
safari: {
filter: function (browsers) {
return browsers.filter(function (browser) {
return browser.browserName === "safari"
})
}
},
opera: {
filter: function (browsers) {
return browsers.filter(function (browser) {
return browser.browserName === "opera"
})
}
}
},
saucelabs: {
all: {
options: {
username: process.env.SAUCE_USERNAME,
key: process.env.SAUCE_ACCESS_KEY,
testname: "Mithril Tests " + new Date().toJSON(),
browsers: "<%= saucelabs.browsers %>",
urls: ["http://localhost:8000/test/index.html"],
sauceConfig: {
"record-video": false,
"record-screenshots": false
},
build: process.env.TRAVIS_JOB_ID,
onTestComplete: function (result, callback) {
var user = process.env.SAUCE_USERNAME
var pass = process.env.SAUCE_ACCESS_KEY
var url = [
"https://saucelabs.com/rest/v1", user, "jobs",
result.job_id
].join("/")
require("request").put({
url: url,
auth: {user: user, pass: pass},
json: {passed: result.passed}
}, function (error, response) {
if (error) {
return callback(error)
} else if (response.statusCode !== 200) {
return callback(new Error(
"Unexpected response status: " +
response.statusCode + "\n "))
} else {
return callback(null, result.passed)
}
})
},
tunnelTimeout: 5
}
}
},
connect: {
server: {
options: {
port: 8888,
base: "."
}
}
},
clean: {
options: {force: true},
generated: [tempFolder]
}
})
grunt.loadNpmTasks("grunt-saucelabs-browsers")
grunt.loadNpmTasks("grunt-contrib-clean")
grunt.loadNpmTasks("grunt-contrib-copy")
grunt.loadNpmTasks("grunt-contrib-uglify")
grunt.loadNpmTasks("grunt-md2html")
grunt.loadNpmTasks("grunt-replace")
grunt.loadNpmTasks("grunt-zip")
grunt.loadNpmTasks("grunt-contrib-connect")
grunt.loadNpmTasks("grunt-saucelabs")
grunt.loadNpmTasks("grunt-eslint")
grunt.loadNpmTasks("grunt-mocha-phantomjs")
grunt.registerTask("build", [
"test",
"uglify",
"zip",
"md2html",
"replace",
"copy",
"clean"
])
grunt.registerTask("test", ["eslint:all", "mocha_phantomjs"])
grunt.registerTask("default", ["build"])
grunt.registerTask("sauce", [
"saucelabs-browsers:all",
"connect",
"saucelabs"
])
}