module.exports = function(grunt) { _ = require('lodash'); var version = "0.1.30"; var inputFolder = "./docs"; var tempFolder = "./temp"; var archiveFolder = "./archive"; var outputFolder = "../mithril"; var guideLayout = "guide"; var guide = [ "auto-redrawing", "benchmarks", "community", "optimizing-performance", "comparison", "components", "getting-started", "installation", "integration", "practices", "refactoring", "routing", "tools", "web-services" ]; var apiLayout = "api"; var api = [ "change-log", "roadmap", "how-to-read-signatures", "mithril", "mithril.computation", "mithril.deferred", "mithril.module", "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 = (grunt.file.exists(src)) ? 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 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, body) { 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: "/*\nMithril v" + version + "\nhttp://github.com/lhorie/mithril.js\n(c) Leo Horie\nLicense: MIT\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: '.' }] } } }); 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.registerTask("build", ["test", "uglify", "zip", "md2html", "replace", "copy", "clean"]); grunt.registerTask("testall", ["test", "teste2e"]); grunt.registerTask("test", ["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"]); };