1 | browserify = require 'browserify'
|
2 | fs = require 'fs'
|
3 | sp = require('uglify-js').parser
|
4 | pro = require('uglify-js').uglify
|
5 | {series} = require 'async'
|
6 | {exec} = require 'child_process'
|
7 |
|
8 | process.env['PATH'] = "node_modules/.bin:#{ process.env['PATH'] }"
|
9 |
|
10 | bold = '\x1b[0;1m'
|
11 | red = '\x1b[0;31m'
|
12 | green = '\x1b[0;32m'
|
13 | reset = '\x1b[0m'
|
14 |
|
15 | log = (message, color = green) -> console.log "#{ color }#{ message }#{ reset }"
|
16 |
|
17 | onerror = (err) ->
|
18 | if err
|
19 | process.stdout.write "#{ red }#{ err.stack }#{ reset }\n"
|
20 | process.exit -1
|
21 |
|
22 | test = (cb) ->
|
23 | exec 'jasmine-node --coffee spec', (err, stdout, stderr) ->
|
24 | msg = /(\d+) tests?, (\d+) assertions?, (\d+) failures?/
|
25 | matches = stdout.match msg || stderr.match msg
|
26 | cb new Error('Tests failed') if matches[3] != '0'
|
27 | log matches[0]
|
28 | cb err
|
29 |
|
30 | task 'test', 'Run all tests', -> test onerror
|
31 |
|
32 | publish = (cb) ->
|
33 |
|
34 | browserPackage = (cb) ->
|
35 | fs.readFile 'package.json', 'utf8', (err, p) ->
|
36 | onerror err
|
37 | p = JSON.parse p
|
38 | throw new Exception 'Invalid package.json' if !p.version
|
39 |
|
40 | log "Update compiler dist for #{ p.version }"
|
41 | b = browserify()
|
42 | b.ignore 'coffee-script'
|
43 | b.require "#{ __dirname }/src/haml-coffee.coffee"
|
44 | b.require "#{ __dirname }/src/hamlc.coffee"
|
45 |
|
46 | code = b.bundle()
|
47 | fs.writeFileSync 'dist/compiler/hamlcoffee.js', code
|
48 |
|
49 | ast = sp.parse code
|
50 | ast = pro.ast_mangle ast
|
51 | ast = pro.ast_squeeze ast
|
52 |
|
53 | min = pro.gen_code ast
|
54 | fs.writeFileSync 'dist/compiler/hamlcoffee.min.js', min
|
55 |
|
56 | exec "git commit -am 'Update compiler dist for #{ p.version }'", (err, stdout, stderr) ->
|
57 | log stdout
|
58 | cb err
|
59 |
|
60 | npmPublish = (cb) ->
|
61 | log 'Publishing to NPM'
|
62 | exec 'npm publish', (err, stdout, stderr) ->
|
63 | log stdout
|
64 | cb err
|
65 |
|
66 | tagVersion = (cb) ->
|
67 | fs.readFile 'package.json', 'utf8', (err, p) ->
|
68 | onerror err
|
69 | p = JSON.parse p
|
70 | throw new Exception 'Invalid package.json' if !p.version
|
71 | log "Tagging v#{ p.version }"
|
72 | exec "git tag v#{ p.version }", (err, stdout, stderr) ->
|
73 | log stdout
|
74 | cb err
|
75 |
|
76 | pushGithub = (cb) ->
|
77 | exec 'git push --tag origin master', (err, stdout, stderr) ->
|
78 | log stdout
|
79 | cb err
|
80 |
|
81 | series [
|
82 | test
|
83 | browserPackage
|
84 | tagVersion
|
85 | pushGithub
|
86 | npmPublish
|
87 | ], cb
|
88 |
|
89 | task 'publish', 'Prepare build and push new version to NPM', -> publish onerror
|