fs = require('fs') path = require('path') #{spawnSync} = require('child_process') wrench = require('wrench') marked = require('marked') uglify = require("uglify-js") browserify = require('browserify') fileify = require('fileify-lm') gulp = require('gulp') taskListing = require('gulp-task-listing') run = require('gulp-run') Orchestrator = require('orchestrator') orchestrator = new Orchestrator() gulp.task 'default', taskListing gulp.task 'hello-world', -> run('echo Hello World').exec() gulp.task 'cdn', -> console.log('pushing to Google Cloud Storage') process.chdir(__dirname) run("gsutil cp ./deploy/* gs://versions.lumenize.com/v#{require('./package.json').version}/").exec(-> run('gsutil setmeta -h "Content-Type: application/javascript" -h "Cache-Control: public, max-age=31556926, no-transform" gs://versions.lumenize.com/v' + require('./package.json').version + '/*').exec() ) #runSync = (command, options, next) -> # {stderr, stdout} = runSyncRaw(command, options) # if stderr?.length > 0 # console.error("Error running `#{command}`\n" + stderr) # process.exit(1) # if next? # next(stdout) # else # if stdout?.length > 0 # console.log("Stdout running command '#{command}'...\n" + stdout) # #runSyncNoExit = (command, options = []) -> # {stderr, stdout} = runSyncRaw(command, options) # console.log("Output of running '#{command + ' ' + options.join(' ')}'...\n#{stderr}\n#{stdout}\n") # return {stderr, stdout} # #runSyncRaw = (command, options) -> # output = spawnSync(command, options) # stdout = output.stdout?.toString() # stderr = output.stderr?.toString() # return {stderr, stdout} # #task('doctest', 'Test examples in documenation.', () -> # process.chdir(__dirname) # runSync('coffeedoctest', ['--readme', 'src', 'lumenize.coffee']) #) # #task('docs', 'Generate docs with JSDuckify/JSDuck and place in ./docs', () -> # runSync('cake doctest') # process.chdir(__dirname) # # create README.html # readmeDotCSSString = fs.readFileSync('read-me.css', 'utf8') # readmeDotMDString = fs.readFileSync('README.md', 'utf8') # readmeDotHTMLString = marked(readmeDotMDString) # readmeDotHTMLString = """ # # #
# #{readmeDotHTMLString} #
# # """ # fs.writeFileSync(path.join(__dirname, 'docs', 'README.html'), readmeDotHTMLString) # # # jsduckify # {name, version} = require('./package.json') # outputDirectory = path.join(__dirname, 'docs', "#{name}-docs") # if fs.existsSync(outputDirectory) # wrench.rmdirSyncRecursive(outputDirectory, false) # process.chdir(__dirname) # runSync('jsduckify', ['-d', outputDirectory, __dirname]) #) # #task('pub-docs', 'Build docs and push out to web', () -> # invoke('docs') # invoke('pubDocsRaw') #) # #task('pubDocsRaw', 'Publish docs to Google Cloud Storage', () -> # process.chdir(__dirname) # console.log('pushing docs to Google Cloud Storage') # runSync('gsutil -m cp -R docs gs://versions.lumenize.com') #) # #task('publish', 'Publish to npm, add git tags, push to Google CDN', () -> # process.chdir(__dirname) # invoke('build') # # console.log('Running tests') # process.chdir(__dirname) # runSync('cake', ['test']) # Doing this externally to make it synchronous # # invoke('docs') # # console.log('Checking git status --porcelain') # runSync('git', ['status', '--porcelain'], (stdout) -> # if stdout.length == 0 # # console.log('checking origin/master') # {stderr, stdout} = runSyncNoExit('git', ['rev-parse', 'origin/master']) # console.log('checking master') # stdoutOrigin = stdout # {stderr, stdout} = runSyncNoExit('git', ['rev-parse', 'master']) # stdoutMaster = stdout # # if stdoutOrigin == stdoutMaster # # console.log('running npm publish') # runSyncNoExit('npm', ['publish', '.']) # # if fs.existsSync('npm-debug.log') # console.error('`npm publish` failed. See npm-debug.log for details.') # else # # console.log('creating git tag') # runSyncNoExit("git", ["tag", "v#{require('./package.json').version}"]) # runSyncNoExit("git", ["push", "--tags"]) # # invoke('cdn') # # invoke('pubDocsRaw') # else # console.error('Origin and master out of sync. Not publishing.') # else # console.error('`git status --porcelain` was not clean. Not publishing.') # ) #) # #task('cdn', 'Push runtime code to content delivery network (CDN)', () -> # console.log('pushing to Google Cloud Storage') # process.chdir(__dirname) # runSyncNoExit("gsutil", ["cp", "./deploy/*", "gs://versions.lumenize.com/v#{require('./package.json').version}/"]) # runSyncNoExit('gsutil', ['setmeta', '-h', "Content-Type: application/javascript", '-h', "Cache-Control: public, max-age=31556926, no-transform", 'gs://versions.lumenize.com/v' + require('./package.json').version + '/*']) #) # #task('build', 'Build with browserify and place in ./deploy', () -> # invoke('update-bower-version') # # console.log('Compiling...') # runSyncNoExit('coffee', ['-c', 'lumenize.coffee', 'src']) # # console.log('Browserifying...') # b = browserify() # b.use(fileify('files', __dirname + '/node_modules/tztime/files')) # b.ignore(['files']) # b.require("./lumenize") # {name, version} = require('./package.json') # fileString = """ # /* # #{name} version: #{version} # */ # #{b.bundle()} # """ # deployFileName = "deploy/#{name}.js" # unless fs.existsSync('deploy') # fs.mkdirSync('deploy') # fs.writeFileSync(deployFileName, fileString) # # minFileString = uglify.minify(deployFileName).code # fs.writeFileSync("deploy/#{name}-min.js", minFileString) # # console.log('done') # # !TODO: Need to run tests on the browserified version #) # #task('update-bower-version', 'Update bower.json with the version number specified in package.json', () -> # bowerJSON = require('./bower.json') # bowerJSON.version = require('./package.json').version # fs.writeFileSync("./bower.json", JSON.stringify(bowerJSON, null, 2)) #) # #task('test', 'Run the test suite with nodeunit', () -> # require('coffee-script/register') # {reporters} = require('nodeunit') # process.chdir(__dirname) # reporters.default.run(['test'], undefined, (failure) -> # if failure? # console.error(failure) # process.exit(1) # ) #) # #task('testall', 'Run tests and doctests', () -> # runSync('cake doctest') # invoke('test') #)