1
1
'use strict'
2
2
3
+ // Foundation for Apps
4
+ //
5
+ // We use this Gulpfile to assemble the documentation, run unit tests,
6
+ // and deploy changes to the live documentation and CDN.
7
+ //
8
+ // The tasks are grouped into these categories:
9
+ // 1. Libraries
10
+ // 2. Variables
11
+ // 3. Cleaning files
12
+ // 4. Copying files
13
+ // 5. Stylesheets
14
+ // 6. JavaScript
15
+ // 7. Testing
16
+ // 8. Server
17
+ // 9. Deployment
18
+ // 10. Default tasks
19
+
20
+ // 1. LIBRARIES
21
+ // - - - - - - - - - - - - - - -
22
+
3
23
var gulp = require ( 'gulp' ) ,
4
24
rimraf = require ( 'rimraf' ) ,
5
25
runSequence = require ( 'run-sequence' ) ,
@@ -14,23 +34,46 @@ var gulp = require('gulp'),
14
34
modRewrite = require ( 'connect-modrewrite' ) ,
15
35
dynamicRouting = require ( './bin/gulp-dynamic-routing' ) ,
16
36
karma = require ( 'gulp-karma' ) ,
17
- rsync = require ( 'gulp-rsync' ) ;
37
+ rsync = require ( 'gulp-rsync' ) ,
38
+ merge = require ( 'merge-stream' ) ;
18
39
19
- // Deploy
20
- gulp . task ( 'deploy' , [ 'build' ] , function ( ) {
21
- return gulp . src ( 'build/**' )
22
- . pipe ( rsync ( {
23
- root : 'build' ,
24
- hostname : 'deployer@72.32.134.77' ,
25
- destination : '/home/deployer/sites/foundation-apps/current'
26
- } ) ) ;
27
- } ) ;
40
+ // 2. VARIABLES
41
+ // - - - - - - - - - - - - - - -
42
+
43
+ var foundationJS = [
44
+ 'bower_components/fastclick/lib/fastclick.js' ,
45
+ 'bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js' ,
46
+ 'bower_components/tether/tether.js' ,
47
+ 'bower_components/angular/angular.js' ,
48
+ 'bower_components/angular-animate/angular-animate.js' ,
49
+ 'bower_components/ui-router/release/angular-ui-router.js' ,
50
+ 'js/vendor/**/*.js' ,
51
+ 'js/angular/**/*.js'
52
+ ] ;
53
+ var docsJS = [
54
+ 'bower_components/marked/lib/marked.js' ,
55
+ 'bower_components/angular-highlightjs/angular-highlightjs.js' ,
56
+ 'bower_components/highlightjs/highlight.pack.js' ,
57
+ 'bower_components/allmighty-autocomplete/script/autocomplete.js' ,
58
+ 'docs/assets/js/app.js'
59
+ ] ;
60
+
61
+ // 3. CLEANIN' FILES
62
+ // - - - - - - - - - - - - - - -
28
63
29
64
// Clean build directory
30
65
gulp . task ( 'clean' , function ( cb ) {
31
66
rimraf ( './build' , cb ) ;
32
67
} ) ;
33
68
69
+ // Clean the partials directory
70
+ gulp . task ( 'clean:partials' , function ( cb ) {
71
+ rimraf ( './build/partials' , cb ) ;
72
+ } ) ;
73
+
74
+ // 4. COPYING FILES
75
+ // - - - - - - - - - - - - - - -
76
+
34
77
// Copy static files (but not the Angular templates, Sass, or JS)
35
78
gulp . task ( 'copy' , function ( ) {
36
79
var dirs = [
@@ -47,17 +90,32 @@ gulp.task('copy', function() {
47
90
. pipe ( gulp . dest ( 'build/assets/img/iconic/' ) ) ;
48
91
} ) ;
49
92
50
- gulp . task ( 'clean-partials' , function ( cb ) {
51
- rimraf ( './build/partials' , cb ) ;
93
+ // Copy page templates and generate routes
94
+ gulp . task ( 'copy:templates' , [ 'copy' ] , function ( ) {
95
+ var config = [ ] ;
96
+
97
+ return gulp . src ( './docs/templates/**/*.html' )
98
+ . pipe ( dynamicRouting ( {
99
+ path : 'build/assets/js/routes.js' ,
100
+ root : 'docs'
101
+ } ) )
102
+ . pipe ( markdown ( ) )
103
+ . pipe ( highlight ( ) )
104
+ . pipe ( gulp . dest ( './build/templates' ) )
105
+ ;
52
106
} ) ;
53
107
54
- gulp . task ( 'copy-partials' , [ 'clean-partials' ] , function ( ) {
108
+ // Copy Foundation directive partials
109
+ gulp . task ( 'copy:partials' , [ 'clean:partials' ] , function ( ) {
55
110
return gulp . src ( [ 'js/angular/partials/**.*' ] )
56
111
. pipe ( gulp . dest ( './build/partials/' ) ) ;
57
112
} ) ;
58
113
114
+ // 5. STYLESHEETS
115
+ // - - - - - - - - - - - - - - -
116
+
117
+ // Inject styles for docs-specific libraries
59
118
gulp . task ( 'css' , [ 'sass' ] , function ( ) {
60
- //copy css
61
119
var dirs = [
62
120
'bower_components/allmighty-autocomplete/style/autocomplete.css' ,
63
121
'build/assets/css/app.css'
@@ -66,16 +124,15 @@ gulp.task('css', ['sass'], function() {
66
124
. pipe ( concat ( 'app.css' ) )
67
125
. pipe ( gulp . dest ( 'build/assets/css' ) )
68
126
;
69
-
70
127
} ) ;
71
128
129
+ // Compile stylesheets with Ruby Sass
72
130
gulp . task ( 'sass' , function ( ) {
73
- return gulp . src ( 'docs/assets/scss/app.scss' )
74
- . pipe ( sass ( {
131
+ return sass ( 'docs/assets/scss/' , {
75
132
loadPath : [ 'scss' ] ,
76
133
style : 'nested' ,
77
134
bundleExec : true
78
- } ) )
135
+ } )
79
136
. on ( 'error' , function ( e ) {
80
137
console . log ( e ) ;
81
138
} )
@@ -85,6 +142,7 @@ gulp.task('sass', function() {
85
142
. pipe ( gulp . dest ( './build/assets/css/' ) ) ;
86
143
} ) ;
87
144
145
+ // Compile stylesheets with node-sass
88
146
gulp . task ( 'node-sass' , function ( ) {
89
147
return gulp . src ( 'docs/assets/scss/app.scss' )
90
148
. pipe ( nodeSass ( {
@@ -99,67 +157,38 @@ gulp.task('node-sass', function() {
99
157
. pipe ( gulp . dest ( './build/assets/css/' ) ) ;
100
158
} ) ;
101
159
102
- // Process Foundation JS
103
- gulp . task ( 'uglify' , [ 'uglify-app' ] , function ( ) {
104
- var libs = [
105
- 'bower_components/fastclick/lib/fastclick.js' ,
106
- 'bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js' ,
107
- 'bower_components/notify.js/notify.js' ,
108
- 'bower_components/tether/tether.js' ,
109
- 'bower_components/marked/lib/marked.js' ,
110
- 'bower_components/angular/angular.js' ,
111
- 'bower_components/allmighty-autocomplete/script/autocomplete.js' ,
112
- 'bower_components/angular-animate/angular-animate.js' ,
113
- 'bower_components/ui-router/release/angular-ui-router.js' ,
114
- 'bower_components/angular-highlightjs/angular-highlightjs.js' ,
115
- 'bower_components/highlightjs/highlight.pack.js' ,
116
- 'js/vendor/**/*.js' ,
117
- ] ;
160
+ // 6. JAVASCRIPT
161
+ // - - - - - - - - - - - - - - -
118
162
119
- return gulp . src ( libs )
163
+ // Compile Foundation JavaScript
164
+ gulp . task ( 'javascript' , function ( ) {
165
+ return gulp . src ( foundationJS )
120
166
. pipe ( uglify ( {
121
167
beautify : true ,
122
168
mangle : false
123
169
} ) . on ( 'error' , function ( e ) {
124
170
console . log ( e ) ;
125
171
} ) )
126
- . pipe ( concat ( 'app .js' ) )
172
+ . pipe ( concat ( 'foundation .js' ) )
127
173
. pipe ( gulp . dest ( './build/assets/js/' ) )
128
174
;
129
175
} ) ;
130
176
131
- // Process Angular JS
132
- gulp . task ( 'uglify-app' , function ( ) {
133
- var libs = [
134
- 'docs/assets/js/angular.js' ,
135
- 'js/angular/**/*.js' ,
136
- '!js/angular/app.js'
137
- ] ;
138
-
139
- return gulp . src ( libs )
177
+ // Compile documentation-specific JavaScript
178
+ gulp . task ( 'javascript:docs' , function ( ) {
179
+ return gulp . src ( docsJS )
140
180
. pipe ( uglify ( {
141
181
beautify : true ,
142
182
mangle : false
143
183
} ) )
144
- . pipe ( concat ( 'angular- app.js' ) )
184
+ . pipe ( concat ( 'app.js' ) )
145
185
. pipe ( gulp . dest ( './build/assets/js/' ) )
146
186
;
147
187
148
188
} ) ;
149
189
150
- gulp . task ( 'copy-templates' , [ 'copy' ] , function ( ) {
151
- var config = [ ] ;
152
-
153
- return gulp . src ( './docs/templates/**/*.html' )
154
- . pipe ( dynamicRouting ( {
155
- path : 'build/assets/js/routes.js' ,
156
- root : 'docs'
157
- } ) )
158
- . pipe ( markdown ( ) )
159
- . pipe ( highlight ( ) )
160
- . pipe ( gulp . dest ( './build/templates' ) )
161
- ;
162
- } ) ;
190
+ // 7. SERVER
191
+ // - - - - - - - - - - - - - - -
163
192
164
193
gulp . task ( 'server:start' , function ( ) {
165
194
connect . server ( {
@@ -172,7 +201,10 @@ gulp.task('server:start', function() {
172
201
} ) ;
173
202
} ) ;
174
203
175
- gulp . task ( 'karma-test' , [ 'build' , 'node-sass' ] , function ( ) {
204
+ // 8. TESTING
205
+ // - - - - - - - - - - - - - - -
206
+
207
+ gulp . task ( 'karma:test' , [ 'build' , 'node-sass' ] , function ( ) {
176
208
var testFiles = [
177
209
'build/assets/js/app.js' ,
178
210
'build/assets/js/angular-app.js' ,
@@ -195,31 +227,64 @@ gulp.task('karma-test', ['build', 'node-sass'], function() {
195
227
196
228
} ) ;
197
229
198
- gulp . task ( 'test' , [ 'karma- test' ] , function ( ) {
230
+ gulp . task ( 'test' , [ 'karma: test' ] , function ( ) {
199
231
console . log ( 'Tests finished.' ) ;
200
232
} ) ;
201
233
234
+ // 9. DEPLOYMENT
235
+ // - - - - - - - - - - - - - - -
236
+
237
+ // Deploy documentation
238
+ gulp . task ( 'deploy' , [ 'build' ] , function ( ) {
239
+ return gulp . src ( 'build/**' )
240
+ . pipe ( rsync ( {
241
+ root : 'build' ,
242
+ hostname : 'deployer@72.32.134.77' ,
243
+ destination : '/home/deployer/sites/foundation-apps/current'
244
+ } ) ) ;
245
+ } ) ;
246
+
247
+ // Deploy to CDN
248
+ gulp . task ( 'deploy:cdn' , function ( ) {
249
+ var js = gulp . src ( foundationJS )
250
+ . pipe ( uglify ( ) )
251
+ . pipe ( concat ( 'foundation.js' ) ) ;
252
+ var css = sass ( 'scss/' , {
253
+ sourcemap : false , style : 'compressed'
254
+ } ) ;
255
+
256
+ merge ( js , css )
257
+ . pipe ( rsync ( {
258
+ hostname : 'deployer@72.32.134.77' ,
259
+ destination : '/home/deployer/sites/foundation-apps/current/cdn'
260
+ } ) ) ;
261
+ } ) ;
262
+
263
+ // 10. NOW BRING IT TOGETHER
264
+ // - - - - - - - - - - - - - - -
265
+
266
+ // Build the documentation once
202
267
gulp . task ( 'build' , function ( cb ) {
203
- runSequence ( 'clean' , [ 'copy' , 'copy- partials' , 'css' , 'uglify' ] , 'copy- templates' , function ( ) {
268
+ runSequence ( 'clean' , [ 'copy' , 'copy: partials' , 'css' , 'javascript' , 'javascript:docs' ] , 'copy: templates' , function ( ) {
204
269
console . log ( 'Successfully built.' ) ;
205
270
cb ( ) ;
206
271
} ) ;
207
272
} ) ;
208
273
209
-
274
+ // Build the documentation, start a test server, and re-compile when files change
210
275
gulp . task ( 'default' , [ 'build' , 'server:start' ] , function ( ) {
211
- // Watch Sass
212
- gulp . watch ( [ './docs/assets/scss/**/*' , './scss/**/*' ] , [ 'css' ] ) ;
213
-
214
- // Watch JavaScript
215
- gulp . watch ( [ './docs/assets/js/**/*' , './js/**/*' ] , [ 'uglify' ] ) ;
216
-
217
276
// Watch static files
218
277
gulp . watch ( [ './docs/**/*.*' , '!./docs/templates/**/*.*' , '!./docs/assets/{scss,js}/**/*.*' ] , [ 'copy' ] ) ;
219
278
279
+ // Watch Angular templates
280
+ gulp . watch ( [ 'docs/templates/**/*.html' ] , [ 'copy:templates' ] ) ;
281
+
220
282
// Watch Angular partials
221
- gulp . watch ( [ 'js/angular/partials/**.*' ] , [ 'copy- partials' ] ) ;
283
+ gulp . watch ( [ 'js/angular/partials/**.*' ] , [ 'copy: partials' ] ) ;
222
284
223
- // Watch Angular templates
224
- gulp . watch ( [ 'docs/templates/**/*.html' ] , [ 'copy-templates' ] ) ;
285
+ // Watch Sass
286
+ gulp . watch ( [ './docs/assets/scss/**/*' , './scss/**/*' ] , [ 'css' ] ) ;
287
+
288
+ // Watch JavaScript
289
+ gulp . watch ( [ './docs/assets/js/**/*' , './js/**/*' ] , [ 'javascript' ] ) ;
225
290
} ) ;
0 commit comments