|
1 | | -{exec} = require "child_process" |
| 1 | +{spawn, exec} = require 'child_process' |
| 2 | +{ncp} = require 'ncp' |
| 3 | +mkdirp = require 'mkdirp' |
| 4 | +fs = require 'fs' |
| 5 | + |
| 6 | +file = 'APIBlueprintImporter.coffee' |
| 7 | +identifier = 'io.apiary.PawExtensions.APIBlueprintImporter' |
| 8 | + |
| 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] |
| 16 | + coffee.stderr.on 'data', (data) -> |
| 17 | + process.stderr.write data.toString() |
| 18 | + coffee.stdout.on 'data', (data) -> |
| 19 | + process.stdout.write data.toString() |
| 20 | + coffee.on 'exit', (code) -> |
| 21 | + if code is 0 |
| 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 | + |
| 31 | +# build: build CoffeeScript and copy files to build directory |
| 32 | +build = (callback) -> |
| 33 | + # mkdir build dir |
| 34 | + mkdirp build_dir, (err) -> |
| 35 | + if err |
| 36 | + console.error err |
| 37 | + else |
| 38 | + build_coffee () -> |
| 39 | + build_copy() |
| 40 | + callback?() |
| 41 | + |
| 42 | +# install: copy files to Extensions directory |
| 43 | +install = (callback) -> |
| 44 | + ncp build_dir, "#{ extensions_dir }/#{ identifier }", (err) -> |
| 45 | + if err |
| 46 | + console.error err |
| 47 | + else |
| 48 | + callback?() |
| 49 | + |
| 50 | +# archive: create a zip archive from the build |
| 51 | +archive = (callback) -> |
| 52 | + zip_file = "#{ identifier.split('.').pop() }.zip" |
| 53 | + |
| 54 | + # go to build dir |
| 55 | + process.chdir "#{ build_root_dir }/" |
| 56 | + |
| 57 | + # delete any previous zip |
| 58 | + if fs.existsSync zip_file |
| 59 | + fs.unlinkSync zip_file |
| 60 | + |
| 61 | + # zip |
| 62 | + zip = spawn 'zip', ["-r", zip_file, "#{ identifier }/"] |
| 63 | + zip.stderr.on 'data', (data) -> |
| 64 | + process.stderr.write data.toString() |
| 65 | + zip.stdout.on 'data', (data) -> |
| 66 | + process.stdout.write data.toString() |
| 67 | + zip.on 'exit', (code) -> |
| 68 | + if code is 0 |
| 69 | + callback?() |
| 70 | + else |
| 71 | + console.error "zip returned with error code: #{ code }" |
| 72 | + |
| 73 | +task 'build', -> |
| 74 | + build() |
2 | 75 |
|
3 | 76 | task 'test', -> |
4 | | - exec 'mocha --compilers coffee:coffee-script/register test.coffee', (err, output) -> |
| 77 | + exec './node_modules/mocha/bin/mocha --compilers coffee:coffee-script/register test.coffee', (err, output) -> |
5 | 78 | throw err if err |
6 | 79 | console.log output |
7 | 80 |
|
8 | | -task 'build', -> |
9 | | - exec 'coffee --compile APIBlueprintImporter.coffee' |
10 | | - console.log "APIBlueprintImporter.js has been built." |
| 81 | +task 'install', -> |
| 82 | + build () -> |
| 83 | + install() |
11 | 84 |
|
12 | | -task 'watch', -> |
13 | | - exec 'coffee --watch --compile APIBlueprintImporter.coffee' |
| 85 | +task 'archive', -> |
| 86 | + build () -> |
| 87 | + archive() |
14 | 88 |
|
| 89 | +task 'watch', -> |
| 90 | + # find all files in directory |
| 91 | + for filename in fs.readdirSync '.' |
| 92 | + # only watch non-hidden files |
| 93 | + if not filename.match(/^\./) and fs.lstatSync("./#{ filename }").isFile() |
| 94 | + fs.watchFile "./#{ filename }", {persistent:true, interval:500}, (_event, _filename) -> |
| 95 | + # when a file is changed, build and install |
| 96 | + build () -> |
| 97 | + install() |
0 commit comments