forked from assaf/zombie
/
Cakefile
132 lines (110 loc) · 4.36 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
fs = require("fs")
path = require("path")
{spawn, exec} = require("child_process")
markdown = require("node-markdown").Markdown
# 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 '')
task "clean", "Remove temporary files and such", ->
exec "rm -rf html clean man1"
# 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"
exec "npm install \"express@>=1.0\""
log "Need Ronn and Docco to generate documentation, installing ...", green
exec "npm install \"ronn@>=0.3\""
exec "npm install \"docco@>=0.3\""
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}\""
# Documentation
# -------------
# Markdown to HTML.
toHTML = (source, title, callback)->
target = "html/#{path.basename(source, ".md").toLowerCase()}.html"
fs.mkdir "html", 0777, ->
fs.readFile "doc/_layout.html", "utf8", (err, layout)->
return callback(err) if err
fs.readFile source, "utf8", (err, text)->
return callback(err) if err
log "Creating #{target} ...", green
exec "ronn --html #{source}", (err, stdout, stderr)->
return callback(err) if err
title ||= stdout.match(/<h1>(.*)<\/h1>/)[1]
body = stdout.replace(/<h1>.*<\/h1>/, "")
html = layout.replace("{{body}}", body).replace(/{{title}}/g, title)
fs.writeFile target, html, "utf8", (err)->
callback err, target
documentPages = (callback)->
toHTML "README.md", "Zombie.js", (err)->
return callback(err) if err
exec "mv html/readme.html html/index.html", (err)->
return callback(err) if err
toHTML "TODO.md", null, (err)->
return callback(err) if err
exec "cp -f doc/*.css html/", callback
documentSource = (callback)->
log "Documenting source files ...", green
exec "docco lib/**/*.coffee", (err)->
return callback(err) if 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)->
return callback(err) if err
fs.writeFile "man1/zombie.1", stdout, "utf8", callback
generateDocs = (callback)->
log "Generating documentation ...", green
documentPages (err)->
return callback(err) if err
documentSource (err)->
return callback(err) if err
generateMan callback
task "doc:pages", -> documentPages (err)-> throw err if err
task "doc:source", -> documentSource (err)-> throw err if err
task "doc:man", -> generateMan (err)-> throw err if err
task "doc", "Generate documentation", -> generateDocs (err)-> throw err if err
# Testing
# -------
runTests = (callback)->
log "Running test suite ...", green
exec "vows --spec", (err, stdout, stderr)->
log stdout, green
log stderr, red
callback err
task "test", "Run all tests", -> runTests (err)-> throw err if err
# Publishing
# ----------
publishDocs = (callback)->
log "Publishing documentation ...", green
generateDocs (err)->
return callback(err) if err
log "Uploading documentation ...", green
exec "rsync -cr --del --progress html/ labnotes.org:/var/www/zombie/", callback
task "doc:publish", -> publishDocs (err)-> throw err if err
task "publish", "Publish new version (Git, NPM, site)", ->
runTests (err)->
throw err if err
fs.readFile "package.json", "utf8", (err, package)->
version = JSON.parse(package).version
log "Tagging v#{version} ...", green
exec "git tag v#{version}", ->
exec "git push --tags origin master"
log "Publishing to NPM ...", green
exec "rm -rf clean && git checkout-index -a -f --prefix clean/ && cp -rf man1 clean/", (err)->
throw err if err
exec "npm publish clean", (err)->
throw err if err
# Publish documentation
publishDocs (err)-> throw err if err