forked from assaf/zombie
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cakefile
161 lines (132 loc) · 5.24 KB
/
Cakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
fs = require("fs")
path = require("path")
{spawn, exec} = require("child_process")
stdout = process.stdout
# ANSI Terminal Colors.
bold = "\033[0;1m"
red = "\033[0;31m"
green = "\033[0;32m"
reset = "\033[0m"
# Log a message with a color.
log = (message, color, explanation) ->
console.log color + message + reset + ' ' + (explanation or '')
# Handle error, do nothing if null
onerror = (err)->
if err
process.stdout.write "#{red}#{err.stack}#{reset}\n"
process.stdout.on "drain", -> process.exit -1
## Setup ##
# Setup development dependencies, not part of runtime dependencies.
task "setup", "Install development dependencies", ->
log "Need Vows and Express to run test suite, installing ...", green
exec "npm install \"vows@>=0.\"5", onerror
exec "npm install \"express@>=1.0\"", onerror
log "Need Ronn and Docco to generate documentation, installing ...", green
exec "npm install \"ronn@>=0.3\"", onerror
exec "npm install \"docco@>=0.3\"", onerror
log "Need runtime dependencies, installing ...", green
fs.readFile "package.json", "utf8", (err, package)->
for name, version of JSON.parse(package).dependencies
exec "npm install \"#{name}@#{version}\"", onerror
## Building ##
build = (callback)->
log "Compiling CoffeeScript to JavaScript ...", green
exec "rm -rf lib && coffee -c -l -b -o lib src", (err, stdout)->
log stdout + "Done", green
callback err
task "build", "Compile CoffeeScript to JavaScript", -> build onerror
task "watch", "Continously compile CoffeeScript to JavaScript", ->
cmd = spawn("coffee", ["-cw", "-o", "lib", "src"])
cmd.stdout.on "data", (data)-> process.stdout.write green + data + reset
cmd.on "error", onerror
task "clean", "Remove temporary files and such", ->
exec "rm -rf html lib man1", onerror
## Testing ##
runTests = (callback)->
log "Running test suite ...", green
exec "vows --spec", (err, stdout)->
process.stdout.write stdout
callback err
task "test", "Run all tests", -> runTests onerror
## Documentation ##
# Markdown to HTML.
toHTML = (source, callback)->
target = "html/#{path.basename(source, ".md").toLowerCase()}.html"
fs.mkdir "html", 0777, ->
fs.readFile "doc/_layout.html", "utf8", (err, layout)->
onerror err
fs.readFile source, "utf8", (err, text)->
onerror err
log "Creating #{target}", green
exec "ronn --html #{source}", (err, stdout, stderr)->
onerror err
[title, subtitle] = stdout.match(/<h1>(.*)<\/h1>/)[1].split(" -- ")
title = title.replace(/\(\d\)/, "")
body = stdout.replace(/<h1>.*<\/h1>/, "")
html = layout.replace("{{body}}", body).replace(/{{title}}/g, title).replace(/{{subtitle}}/g, subtitle || "")
fs.writeFile target, html, "utf8", (err)->
callback err, target
documentPages = (callback)->
toHTML "README.md", (err)->
onerror err
exec "mv html/readme.html html/index.html", (err)->
onerror err
toHTML "TODO.md", (err)->
onerror err
toHTML "CHANGELOG.md", (err)->
onerror err
process.stdout.write "\n"
exec "cp -f doc/*.css html/", callback
documentSource = (callback)->
log "Documenting source files ...", green
exec "docco src/*.coffee src/**/*.coffee", (err, stdout, stderr)->
log stdout, green
onerror err
log "Copying to html/source", green
exec "mkdir -p html && cp -rf docs/ html/source && rm -rf docs", callback
generateMan = (callback)->
log "Generating man file ...", green
fs.mkdir "man1", 0777, ->
exec "ronn --roff README.md", (err, stdout, stderr)->
onerror err
log "Done", green
fs.writeFile "man1/zombie.1", stdout, "utf8", callback
generateDocs = (callback)->
log "Generating documentation ...", green
documentPages (err)->
onerror err
documentSource (err)->
onerror err
generateMan callback
task "doc:pages", "Generate documentation for main pages", -> documentPages onerror
task "doc:source", "Generate documentation from source files", -> documentSource onerror
task "doc:man", "Generate man pages", -> generateMan onerror
task "doc", "Generate all documentation", -> generateDocs onerror
## Publishing ##
publishDocs = (callback)->
log "Publishing documentation ...", green
generateDocs (err)->
onerror err
log "Uploading documentation ...", green
exec "rsync -cr --del --progress html/ labnotes.org:/var/www/zombie/", (err, stdout, stderr)->
log stdout, green
callback err
task "doc:publish", "Publish documentation to site", -> publishDocs onerror
task "publish", "Publish new version (Git, NPM, site)", ->
runTests (err)->
onerror err
fs.readFile "package.json", "utf8", (err, package)->
version = JSON.parse(package).version
log "Tagging v#{version} ...", green
exec "git tag v#{version}", (err, stdout, stderr)->
log stdout, green
exec "git push --tags origin master", (err, stdout, stderr)->
log stdout, green
log "Publishing to NPM ...", green
build (err)->
onerror err
exec "npm publish ./", (err, stdout, stderr)->
log stdout, green
onerror err
# Publish documentation
publishDocs onerror