2025-04-24 17:03:28 +08:00

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.')
)