94 lines
3.0 KiB
CoffeeScript
94 lines
3.0 KiB
CoffeeScript
fs = require('fs')
|
|
spawnSync = require('child_process').spawnSync
|
|
path = require('path')
|
|
_ = require('lodash')
|
|
|
|
isWindows = (process.platform.lastIndexOf('win') == 0)
|
|
runSync = (command) ->
|
|
# Spawn things in a sub-shell so things like io redirection and gsutil work
|
|
if isWindows
|
|
shell = 'cmd.exe'
|
|
args = ['/c', command]
|
|
else
|
|
shell = 'sh'
|
|
args = ['-c', command]
|
|
{status, stdout, stderr} = spawnSync(shell, args, {encoding: 'utf8'})
|
|
if stderr?.length > 0 or status > 0
|
|
console.error("Error running: '#{command}'\n#{stderr}\n#{stdout}\n")
|
|
process.exit(status)
|
|
else
|
|
console.log("Output of running '#{command}'\n#{stdout}\n")
|
|
return stdout
|
|
|
|
task('clean', 'Deletes .js and .map files', () ->
|
|
folders = ['.']
|
|
for folder in folders
|
|
pathToClean = path.join(__dirname, folder)
|
|
contents = fs.readdirSync(pathToClean)
|
|
for file in contents when (_.endsWith(file, '.js') or _.endsWith(file, '.map'))
|
|
fs.unlinkSync(path.join(pathToClean, file))
|
|
)
|
|
|
|
task('compile', 'Compile CoffeeScript source files to JavaScript', () ->
|
|
process.chdir(__dirname)
|
|
fs.readdir('./', (err, contents) ->
|
|
files = ("#{file}" for file in contents when (file.indexOf('.coffee') > 0))
|
|
command = ['coffee', '-c'].concat(files).join(' ')
|
|
runSync(command)
|
|
)
|
|
)
|
|
|
|
task('test', 'Run the CoffeeScript test suite with nodeunit', () ->
|
|
# invoke('testES6') # Commented out for now until we use Proxy support in later versions to enable array/
|
|
{reporters} = require('nodeunit')
|
|
process.chdir(__dirname)
|
|
reporters.default.run(['test'], undefined, (failure) ->
|
|
if failure?
|
|
console.log(failure)
|
|
process.exit(1)
|
|
)
|
|
)
|
|
|
|
task('testES6', 'Run tests in testES6 folder with --harmony-proxies flag', () ->
|
|
# runSync("node --harmony-proxies node_modules/nodeunit/bin/nodeunit testES6/es6Test.coffee")
|
|
runSync("node node_modules/nodeunit/bin/nodeunit testES6/es6Test.coffee")
|
|
)
|
|
|
|
task('publish', 'Publish to npm and add git tags', () ->
|
|
process.chdir(__dirname)
|
|
runSync('cake test') # Doing this externally to make it synchronous
|
|
process.chdir(__dirname)
|
|
runSync('cake compile')
|
|
console.log('checking git status --porcelain')
|
|
stdout = runSync('git status --porcelain')
|
|
if stdout.length > 0
|
|
console.error('`git status --porcelain` was not clean. Not publishing.')
|
|
else
|
|
console.log('checking origin/master')
|
|
stdout = runSync('git rev-parse origin/master')
|
|
|
|
console.log('checking master')
|
|
stdoutOrigin = stdout
|
|
stdout = runSync('git rev-parse master')
|
|
stdoutMaster = stdout
|
|
|
|
if stdoutOrigin == stdoutMaster
|
|
|
|
console.log('running npm publish')
|
|
runSync('npm publish .')
|
|
|
|
try
|
|
stat = fs.statSync('npm-debug.log')
|
|
console.error('`npm publish` failed. See npm-debug.log for details.')
|
|
process.exit(1)
|
|
|
|
console.log('creating git tag')
|
|
runSync("git tag v#{require('./package.json').version}")
|
|
runSync("git push --tags")
|
|
invoke("clean")
|
|
else
|
|
console.error('Origin and master out of sync. Not publishing.')
|
|
)
|
|
|
|
|