UNPKG

glass-build

Version:

Contains scripts for building glass based projects.

123 lines (112 loc) 4.36 kB
require 'sugar' if global.window? return fs = require 'fs' np = require 'path' cp = require './coffeepages' ae = require './appengine' {watcher,utility} = browserBuild = require 'browser-build' check = (config) -> throw new Error "config.node is required" unless config.node? throw new Error "config.source is required" unless config.source? if Object.isString config.node config.node = {directory:config.node} if Object.isString config.source config.source = {directory:config.source} if config.browser? config.browser.output.directory ?= "www/js" config.browser.output.webroot ?= "www" config.browser.output.test ?= "glass-test" if config.appengine?.pages config.pages = input: directory: 'war' output: directory: 'war/WEB-INF/pages' return build = (config, callback) -> utility.buildCoffee config.source.directory, config.node.directory, callback watchCoffee = (config) -> utility.watchCoffee config.source.directory, config.node.directory if config.browser? browserBuild.watch config.browser runTest = (config, callback) -> list = utility.list config.node.directory, {include:".js"} return unless config.browser.output.test? testModule = np.join config.browser.output.directory, 'test/test.js' utility.spawn "node.cmd #{testModule} #{list.join ' '}", callback # if config.browser.output.test is 'mocha' # utility.spawn "mocha.cmd --harmony -R spec #{list.join ' '}", callback # else if config.browser.output.test is 'glass-test' # try # utility.spawn "node.cmd node_modules/glass-test/lib/index.js #{list.join ' '}" # catch e # console.log "Couldn't run glass-test: #{e}" watchTest = (config) -> # use a directory watcher to invoke nodeunit tests debouncedRunTest = (-> runTest config ).debounce(500) options = filter: ".js" initial: false watcher.watchDirectory config.node.directory, options, debouncedRunTest getPackageJson = (config) -> path = 'package.json' JSON.parse fs.readFileSync(path, 'utf8') buildCommon = (config) -> check config for file in ["README.md", "package.json"] if fs.existsSync file utility.copy file, "#{config.node.directory}/#{file}" # copy package.json and readme.md to node_modules module.exports = exports = # re-export utility and watchers utility: utility watcher: watcher # builds this project build: (config, callback) -> buildCommon config build config, -> if config.browser? browserBuild.build config.browser cp.buildCoffeePages config.pages if config.appengine? ae.build() runTest config, callback # watches input and incrementally builds output watch: (config) -> buildCommon config watchCoffee config watchTest config cp.watchCoffeePages config.pages if config.appengine? ae.run() if config.appengine.java? watcher.watchDirectory config.appengine.java, {initial:false}, (file) -> ae.restart() # maybe start a web server else if config.browser?.port? utility.startWebServer root: config.browser.output.webroot port: config.browser.port # server = {ant:'runserver'} kill: (config, callback) -> if config.appengine? ae.kill() # runs our unit tests test: (config, callback) -> check config runTest config, callback # runs npm publish on the output library publish: (config, callback) -> exports.build config, -> utility.spawn "npm.cmd publish #{config.node.directory}", callback # bumps the package.json build version number bump: (config, callback) -> pj = getPackageJson config version = pj.version.split '.' # bump the build version version[2] = parseInt(version[2]) + 1 version = version.join '.' utility.spawn "npm.cmd version #{version}", callback