-
Notifications
You must be signed in to change notification settings - Fork 332
/
build.coffee
83 lines (66 loc) · 2.19 KB
/
build.coffee
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
async = require 'async'
chalk = require 'chalk'
fs = require 'fs'
path = require 'path'
rimraf = require 'rimraf'
{fileExistsSync} = require './../core/utils'
{loadEnv, commonOptions, commonUsage, extendOptions} = require './common'
{logger} = require './../core/logger'
usage = """
usage: wintersmith build [options]
options:
-o, --output [path] directory to write build-output (defaults to ./build)
-X, --clean clean before building (warning: will recursively delete everything at output path)
#{ commonUsage }
all options can also be set in the config file
examples:
build using a config file (assuming config.json is found in working directory):
$ wintersmith build
build using command line options:
$ wintersmith build -o /var/www/public/ -T extra_data.json -C ~/my-blog
or using both (command-line options will override config options):
$ wintersmith build --config another_config.json --clean
"""
options =
alias:
output: 'o'
clean: 'X'
boolean: ['clean']
string: ['output']
extendOptions options, commonOptions
build = (argv) ->
start = new Date()
logger.info 'building site'
prepareOutputDir = (env, callback) ->
# create clean and create output directory if needed
outputDir = env.resolvePath env.config.output
exists = fileExistsSync outputDir
if exists
if argv.clean
logger.verbose "cleaning - running rimraf on #{ outputDir }"
async.series [
(callback) -> rimraf outputDir, callback
(callback) -> fs.mkdir outputDir, callback
], callback
else
callback()
else
logger.verbose "creating output directory #{ outputDir }"
fs.mkdir outputDir, callback
async.waterfall [
(callback) -> loadEnv argv, callback
(env, callback) ->
prepareOutputDir env, (error) -> callback error, env
(env, callback) ->
env.build callback
], (error) ->
if error
logger.error error.message, error
process.exit 1
else
stop = new Date()
delta = stop - start
logger.info "done in #{ chalk.bold delta } ms\n"
module.exports = build
module.exports.usage = usage
module.exports.options = options