|
1 |
| -{print} = require 'sys' |
2 | 1 | {spawn} = require 'child_process'
|
| 2 | +{ncp} = require 'ncp' |
| 3 | +mkdirp = require 'mkdirp' |
| 4 | +fs = require 'fs' |
3 | 5 |
|
4 | 6 | file = 'JavaScriptjQueryCodeGenerator.coffee'
|
| 7 | +identifier = 'com.luckymarmot.PawExtensions.JavaScriptjQueryCodeGenerator' |
5 | 8 |
|
6 |
| -task 'build', -> |
7 |
| - coffee = spawn 'coffee', ['-c', file] |
| 9 | +extensions_dir = "#{ process.env.HOME }/Library/Containers/com.luckymarmot.Paw/Data/Library/Application Support/com.luckymarmot.Paw/Extensions/" |
| 10 | +build_root_dir = "build" |
| 11 | +build_dir = "#{ build_root_dir }/#{ identifier }" |
| 12 | + |
| 13 | +# compile CoffeeScript |
| 14 | +build_coffee = (callback) -> |
| 15 | + coffee = spawn 'coffee', ['-c', '-o', build_dir, file] |
8 | 16 | coffee.stderr.on 'data', (data) ->
|
9 | 17 | process.stderr.write data.toString()
|
10 | 18 | coffee.stdout.on 'data', (data) ->
|
11 |
| - print data.toString() |
| 19 | + process.stdout.write data.toString() |
12 | 20 | coffee.on 'exit', (code) ->
|
13 | 21 | if code is 0
|
14 |
| - console.log '>>> Build successful' |
| 22 | + callback?() |
| 23 | + else |
| 24 | + console.error "Build failed with error: #{ code }" |
| 25 | + |
| 26 | +# copy files to build directory |
| 27 | +build_copy = () -> |
| 28 | + fs.writeFileSync "#{ build_dir }/README.md", fs.readFileSync("./README.md") |
| 29 | + fs.writeFileSync "#{ build_dir }/LICENSE", fs.readFileSync("./LICENSE") |
| 30 | + fs.writeFileSync "#{ build_dir }/javascript.mustache", fs.readFileSync("./javascript.mustache") |
| 31 | + fs.writeFileSync "#{ build_dir }/mustache.js", fs.readFileSync("./node_modules/mustache/mustache.js") |
| 32 | + fs.writeFileSync "#{ build_dir }/URI.js", fs.readFileSync("./lib/URI.js") |
| 33 | + |
| 34 | +# build: build CoffeeScript and copy files to build directory |
| 35 | +build = (callback) -> |
| 36 | + # mkdir build dir |
| 37 | + mkdirp build_dir, (err) -> |
| 38 | + if err |
| 39 | + console.error err |
15 | 40 | else
|
16 |
| - console.log '!!! Build failed' |
| 41 | + build_coffee () -> |
| 42 | + build_copy() |
| 43 | + callback?() |
| 44 | + |
| 45 | +# install: copy files to Extensions directory |
| 46 | +install = (callback) -> |
| 47 | + ncp build_dir, "#{ extensions_dir }/#{ identifier }", (err) -> |
| 48 | + if err |
| 49 | + console.error err |
| 50 | + else |
| 51 | + callback?() |
| 52 | + |
| 53 | +# archive: create a zip archive from the build |
| 54 | +archive = (callback) -> |
| 55 | + zip_file = "#{ identifier.split('.').pop() }.zip" |
| 56 | + |
| 57 | + # go to build dir |
| 58 | + process.chdir "#{ build_root_dir }/" |
| 59 | + |
| 60 | + # delete any previous zip |
| 61 | + if fs.existsSync zip_file |
| 62 | + fs.unlinkSync zip_file |
| 63 | + |
| 64 | + # zip |
| 65 | + zip = spawn 'zip', ["-r", zip_file, "#{ identifier }/"] |
| 66 | + zip.stderr.on 'data', (data) -> |
| 67 | + process.stderr.write data.toString() |
| 68 | + zip.stdout.on 'data', (data) -> |
| 69 | + process.stdout.write data.toString() |
| 70 | + zip.on 'exit', (code) -> |
| 71 | + if code is 0 |
| 72 | + callback?() |
| 73 | + else |
| 74 | + console.error "zip returned with error code: #{ code }" |
| 75 | + |
| 76 | +task 'build', -> |
| 77 | + build() |
| 78 | + |
| 79 | +task 'test', -> |
| 80 | + build () -> |
| 81 | + # no test to run |
| 82 | + |
| 83 | +task 'install', -> |
| 84 | + build () -> |
| 85 | + install() |
| 86 | + |
| 87 | +task 'archive', -> |
| 88 | + build () -> |
| 89 | + archive() |
17 | 90 |
|
18 | 91 | task 'watch', ->
|
19 |
| - spawn 'coffee', ['--watch', '--compile', file] |
| 92 | + # find all files in directory |
| 93 | + for filename in fs.readdirSync '.' |
| 94 | + # only watch non-hidden files |
| 95 | + if not filename.match(/^\./) and fs.lstatSync("./#{ filename }").isFile() |
| 96 | + fs.watchFile "./#{ filename }", {persistent:true, interval:500}, (_event, _filename) -> |
| 97 | + # when a file is changed, build and install |
| 98 | + build () -> |
| 99 | + install() |
0 commit comments