1
+ process . env . DEBUG = '*' ;
2
+
3
+ /**
4
+ * # Welcome to Scout's gulpfile!
5
+ *
6
+ * Here are a few tips to guide you on your quest:
7
+ *
8
+ * - [Gulp](http://gulpjs.com) is a toolkit for workflow automation
9
+ * - Use the `DEBUG` environment variable if you run into trouble! @see http://npm.im/debug
10
+ * - Check out the [gulp cookbook](http://git.io/vGye8) for more info
11
+ * - Remember to smile and floss
12
+ */
13
+ var path = require ( 'path' ) ;
14
+ var spawn = require ( 'child_process' ) . spawn ;
1
15
var browserify = require ( 'browserify' ) ;
2
16
var watchify = require ( 'watchify' ) ;
3
17
var source = require ( 'vinyl-source-stream' ) ;
@@ -9,91 +23,101 @@ var sourcemaps = require('gulp-sourcemaps');
9
23
var buffer = require ( 'vinyl-buffer' ) ;
10
24
var merge = require ( 'merge-stream' ) ;
11
25
var shell = require ( 'gulp-shell' ) ;
12
- var path = require ( 'path' ) ;
13
26
var del = require ( 'del' ) ;
14
- var spawn = require ( 'child_process' ) . spawn ;
27
+ var sequence = require ( 'run-sequence' ) ;
15
28
16
29
var notify = require ( './tasks/notify' ) ;
17
30
var pkg = require ( './package.json' ) ;
18
31
19
32
// Platform specific tasks
20
33
var platform = require ( path . join ( __dirname , 'tasks' , process . platform ) ) ;
21
34
22
- gulp . task ( 'dev:configure' , function ( ) {
23
- process . env . NODE_ENV = 'development' ;
24
- } ) ;
25
-
26
- gulp . task ( 'release:configure' , function ( ) {
35
+ /**
36
+ * # release
37
+ *
38
+ * `npm run release` calls this to build Scout
39
+ * and generate installers for users.
40
+ */
41
+ gulp . task ( 'release' , function ( done ) {
27
42
process . env . NODE_ENV = 'production' ;
43
+ sequence (
44
+ 'build' ,
45
+ 'electron:build' ,
46
+ 'electron:build-installer'
47
+ , done ) ;
28
48
} ) ;
29
49
30
- // `npm start` calls this.
31
- gulp . task ( 'dev' , [ 'dev:build-app' , 'dev:build-js' , 'dev:remove-unpacked-app' ] , function ( ) {
32
- var child = spawn ( path . resolve ( platform . ELECTRON ) , [ 'build/' ] ) ;
33
- child . stderr . pipe ( process . stderr ) ;
34
- child . stdout . pipe ( process . stdout ) ;
35
- child . on ( 'exit' , function ( code ) {
36
- process . exit ( code ) ;
37
- } ) ;
38
- return gulp . start ( 'dev:watch' ) ;
39
- } ) ;
40
-
41
- gulp . task ( 'dev:build-app' , [ 'dev:configure' , 'dev:build-electron' ] , function ( ) {
42
- return gulp . start ( 'pages' , 'less' , 'copy:fonts' , 'copy:images' , 'copy:electron' ) ;
43
- } ) ;
44
-
45
- gulp . task ( 'dev:remove-unpacked-app' , [ 'dev:build-electron' ] , function ( ) {
46
- // deletes the `app` folder in electron build
47
- // so `platform:start` can just point the electron renderer at `BUILD`
48
- // and we don't have to do all kinds of crazy copying.
49
- return del ( platform . BUILD ) ;
50
- } ) ;
51
- gulp . task ( 'dev:build-electron' , platform . build ) ;
52
-
53
- // `npm run release` calls this.
54
- gulp . task ( 'release' , [ 'release:build-app' ] , function ( ) {
55
- return gulp . start ( 'release:electron:build-installer' ) ;
50
+ /**
51
+ * # build
52
+ */
53
+ gulp . task ( 'build' , function ( done ) {
54
+ sequence (
55
+ [
56
+ 'build:pages' ,
57
+ 'build:less' ,
58
+ 'copy:fonts' ,
59
+ 'copy:images' ,
60
+ 'copy:text' ,
61
+ 'copy:js' ,
62
+ 'copy:package.json'
63
+ ] ,
64
+ 'npm:install' ,
65
+ 'build:js'
66
+ , done ) ;
56
67
} ) ;
57
68
58
- gulp . task ( 'release:build-app' , [
59
- 'js' ,
60
- 'pages' ,
61
- 'less' ,
62
- 'copy:fonts' ,
63
- 'copy:images' ,
64
- 'copy:electron'
65
- ] ) ;
66
-
67
- gulp . task ( 'release:electron:build-installer' , [ 'release:build-app' ] , platform . installer ) ;
68
-
69
- var bundler = browserify ( pkg . browserify ) . transform ( 'jadeify' ) ;
70
- gulp . task ( 'js' , [ 'release:npm-install' ] , function ( ) {
71
- return bundler . bundle ( )
72
- . on ( 'error' , notify ( 'js' ) )
73
- . pipe ( source ( 'index.js' ) )
74
- . pipe ( buffer ( ) )
75
- . pipe ( sourcemaps . init ( {
76
- loadMaps : true
77
- } ) )
78
- . pipe ( sourcemaps . write ( './' ) )
79
- . pipe ( gulp . dest ( 'build/' ) ) ;
69
+ /**
70
+ * # dev
71
+ *
72
+ * `npm start` calls this which you call at least once a day
73
+ * so if there is something bugging you, post a message in flowdock!
74
+ */
75
+ gulp . task ( 'dev' , function ( done ) {
76
+ process . env . NODE_ENV = 'development' ;
77
+ sequence (
78
+ 'build' ,
79
+ 'electron:build' ,
80
+ 'electron:start' ,
81
+ 'watch'
82
+ , done ) ;
80
83
} ) ;
81
84
82
- gulp . task ( 'dev:watch' , function ( ) {
83
- gulp . watch ( [ 'src/{*,**/*}.less' , 'styles/*.less' ] , [ 'less' ] ) ;
84
- gulp . watch ( [ 'src/*.jade' ] , [ 'pages' ] ) ;
85
+ /**
86
+ * # watch
87
+ *
88
+ * Once you build the app and start it up, the next thing you'll want to do
89
+ * is actually change things. `watch` handles applying the correct
90
+ * tasks to your change so you can actually view the results.
91
+ */
92
+ gulp . task ( 'watch' , function ( ) {
93
+ gulp . watch ( [ 'src/{*,**/*}.less' , 'styles/*.less' ] , [ 'build:less' ] ) ;
94
+ gulp . watch ( [ 'src/*.jade' ] , [ 'build:pages' ] ) ;
85
95
gulp . watch ( 'images/{*,**/*}' , [ 'copy:images' ] ) ;
86
96
gulp . watch ( 'fonts/*' , [ 'copy:fonts' ] ) ;
87
- gulp . watch ( [ 'main.js' , 'src/electron/*' , 'settings.json' ] , [ 'copy:electron' ] ) ;
88
- gulp . watch ( 'package.json' , [ 'copy:electron' , 'dev:npm-install' ] ) ;
97
+ gulp . watch ( [ 'src/electron/*' ] , [ 'copy:js' ] ) ;
98
+ gulp . watch ( 'package.json' , function ( ) {
99
+ gutil . log ( 'package.json changed!' ) ;
100
+ sequence ( 'copy:package.json' , 'npm:install' ) ;
101
+ } ) ;
89
102
} ) ;
90
103
91
104
/**
92
- * Gulp's [fast browserify builds recipe](http://git.io/iiCk-A)
105
+ * Use browserify to compile the UI js.
93
106
*/
94
- gulp . task ( 'dev:build-js' , [
95
- 'dev:build-app' ,
96
- 'dev:npm-install' ] , function ( ) {
107
+ gulp . task ( 'build:js' , function ( ) {
108
+ var bundler = browserify ( pkg . browserify ) . transform ( 'jadeify' ) ;
109
+ if ( process . env . NODE_ENV === 'production' ) {
110
+ return bundler . bundle ( )
111
+ . on ( 'error' , notify ( 'js' ) )
112
+ . pipe ( source ( 'index.js' ) )
113
+ . pipe ( buffer ( ) )
114
+ . pipe ( sourcemaps . init ( {
115
+ loadMaps : true
116
+ } ) )
117
+ . pipe ( sourcemaps . write ( './' ) )
118
+ . pipe ( gulp . dest ( 'build/' ) ) ;
119
+ }
120
+ // @see [fast browserify builds recipe](http://git.io/iiCk-A)
97
121
var b ;
98
122
function rebundle ( files ) {
99
123
if ( files ) {
@@ -112,8 +136,10 @@ gulp.task('dev:build-js', [
112
136
return rebundle ( ) ;
113
137
} ) ;
114
138
115
- // Compile LESS to CSS.
116
- gulp . task ( 'less' , function ( ) {
139
+ /**
140
+ * Compile LESS to CSS.
141
+ */
142
+ gulp . task ( 'build:less' , function ( ) {
117
143
return gulp . src ( 'src/*.less' )
118
144
. pipe ( sourcemaps . init ( ) )
119
145
. pipe ( less ( pkg . less ) )
@@ -122,8 +148,13 @@ gulp.task('less', function() {
122
148
. pipe ( gulp . dest ( 'build/' ) ) ;
123
149
} ) ;
124
150
125
- // Compile jade templates to HTML files.
126
- gulp . task ( 'pages' , function ( ) {
151
+ /**
152
+ * Compile jade templates to static HTML files.
153
+ * require('*.jade') statements you see in `src`
154
+ * are compiled via the `jadeify` browserify transform.
155
+ * @see build:js
156
+ */
157
+ gulp . task ( 'build:pages' , function ( ) {
127
158
return gulp . src ( 'src/index.jade' )
128
159
. pipe ( jade ( {
129
160
locals : {
@@ -134,7 +165,32 @@ gulp.task('pages', function() {
134
165
. pipe ( gulp . dest ( 'build/' ) ) ;
135
166
} ) ;
136
167
137
- // Things that should be copied into `build/`.
168
+ /**
169
+ * ## electron
170
+ */
171
+ gulp . task ( 'electron:start' , function ( ) {
172
+ var child = spawn ( path . resolve ( platform . ELECTRON ) , [ 'build/' ] ) ;
173
+ child . stderr . pipe ( process . stderr ) ;
174
+ child . stdout . pipe ( process . stdout ) ;
175
+ child . on ( 'exit' , function ( code ) {
176
+ process . exit ( code ) ;
177
+ } ) ;
178
+ } ) ;
179
+
180
+ gulp . task ( 'electron:build' , function ( done ) {
181
+ platform . build ( function ( err ) {
182
+ if ( err ) {
183
+ return done ( err ) ;
184
+ }
185
+ done ( ) ;
186
+ } ) ;
187
+ } ) ;
188
+
189
+ gulp . task ( 'electron:build-installer' , platform . installer ) ;
190
+
191
+ /**
192
+ * ## Things that should be copied into `build/`.
193
+ */
138
194
gulp . task ( 'copy:fonts' , function ( ) {
139
195
return gulp . src ( pkg . fonts )
140
196
. pipe ( gulp . dest ( 'build/fonts' ) ) ;
@@ -145,20 +201,27 @@ gulp.task('copy:images', function() {
145
201
. pipe ( gulp . dest ( 'build/images' ) ) ;
146
202
} ) ;
147
203
148
- gulp . task ( 'copy:electron' , function ( ) {
204
+ gulp . task ( 'copy:package.json' , function ( ) {
205
+ return gulp . src ( 'package.json' )
206
+ . pipe ( gulp . dest ( 'build/' ) ) ;
207
+ } ) ;
208
+
209
+ gulp . task ( 'copy:text' , function ( ) {
210
+ return gulp . src ( [ 'README.md' ] )
211
+ . pipe ( gulp . dest ( 'build/' ) ) ;
212
+ } ) ;
213
+
214
+ // Copy non-UI js into the build.
215
+ gulp . task ( 'copy:js' , function ( ) {
149
216
return merge (
150
- gulp . src ( [ 'main.js' , 'package.json' , 'settings.json' , 'README.md' ] )
217
+ gulp . src ( [ 'main.js' ] )
151
218
. pipe ( gulp . dest ( 'build/' ) ) ,
152
219
gulp . src ( [ 'src/electron/*' ] )
153
220
. pipe ( gulp . dest ( 'build/src/electron' ) )
154
221
) ;
155
222
} ) ;
156
223
157
- gulp . task ( 'dev:npm-install' , [ 'copy:electron' ] , shell . task ( 'npm install' , {
158
- cwd : 'build/'
159
- } ) ) ;
160
-
161
- gulp . task ( 'release:npm-install' , [ 'copy:electron' ] , shell . task ( 'npm install --production' , {
224
+ gulp . task ( 'npm:install' , shell . task ( 'npm install --production --quiet --loglevel error' , {
162
225
cwd : 'build/'
163
226
} ) ) ;
164
227
0 commit comments