1
1
var gulp = require ( 'gulp' ) ;
2
2
var path = require ( 'canonical-path' ) ;
3
3
var pkg = require ( './package.json' ) ;
4
+ var request = require ( 'request' ) ;
5
+ var q = require ( 'q' ) ;
4
6
var semver = require ( 'semver' ) ;
5
7
var through = require ( 'through' ) ;
6
8
@@ -59,39 +61,46 @@ gulp.task('default', ['build']);
59
61
gulp . task ( 'build' , [ 'bundle' , 'sass' ] ) ;
60
62
gulp . task ( 'validate' , [ 'jshint' , 'ddescribe-iit' , 'karma' ] ) ;
61
63
62
-
63
64
var IS_WATCH = false ;
64
65
gulp . task ( 'watch' , [ 'build' ] , function ( ) {
65
66
IS_WATCH = true ;
66
67
gulp . watch ( 'js/**/*.js' , [ 'bundle' ] ) ;
67
68
gulp . watch ( 'scss/**/*.scss' , [ 'sass' ] ) ;
68
69
} ) ;
69
70
70
- gulp . task ( 'changelog' , function ( done ) {
71
- var codename = pkg . codename ;
72
- var file = argv . standalone ? '' : __dirname + '/CHANGELOG.md' ;
73
- var subtitle = argv . subtitle || '"' + codename + '"' ;
74
- var toHtml = ! ! argv . html ;
71
+ gulp . task ( 'changelog' , function ( ) {
75
72
var dest = argv . dest || 'CHANGELOG.md' ;
76
- var from = argv . from ;
77
- changelog ( {
78
- repository : 'https://github.com/driftyco/ionic' ,
79
- version : pkg . version ,
80
- subtitle : subtitle ,
81
- file : file ,
82
- from : from
83
- } , function ( err , data ) {
84
- if ( err ) return done ( err ) ;
73
+ var toHtml = ! ! argv . html ;
74
+ return makeChangelog ( argv ) . then ( function ( log ) {
85
75
if ( toHtml ) {
86
- data = marked ( data , {
76
+ log = marked ( log , {
87
77
gfm : true
88
78
} ) ;
89
79
}
90
- fs . writeFileSync ( dest , data ) ;
91
- done ( ) ;
80
+ fs . writeFileSync ( dest , log ) ;
92
81
} ) ;
93
82
} ) ;
94
83
84
+ function makeChangelog ( options ) {
85
+ var codename = pkg . codename ;
86
+ var file = options . standalone ? '' : __dirname + '/CHANGELOG.md' ;
87
+ var subtitle = options . subtitle || '"' + codename + '"' ;
88
+ var from = options . from ;
89
+ var version = options . version || pkg . version ;
90
+ var deferred = q . defer ( ) ;
91
+ changelog ( {
92
+ repository : 'https://github.com/driftyco/ionic' ,
93
+ version : version ,
94
+ subtitle : subtitle ,
95
+ file : file ,
96
+ from : from
97
+ } , function ( err , log ) {
98
+ if ( err ) deferred . reject ( err ) ;
99
+ else deferred . resolve ( log ) ;
100
+ } ) ;
101
+ return deferred . promise ;
102
+ }
103
+
95
104
gulp . task ( 'bundle' , [
96
105
'scripts' ,
97
106
'scripts-ng' ,
@@ -220,7 +229,11 @@ gulp.task('release-tweet', function(done) {
220
229
var client = new twitter ( oauth ) ;
221
230
client . statuses (
222
231
'update' ,
223
- { status : buildConfig . releaseMessage ( ) } ,
232
+ {
233
+ status : argv . test ?
234
+ 'This is a test.' :
235
+ buildConfig . releaseMessage ( )
236
+ } ,
224
237
oauth . accessToken ,
225
238
oauth . accessTokenSecret ,
226
239
done
@@ -236,12 +249,62 @@ gulp.task('release-irc', function(done) {
236
249
realName : 'ionitron' ,
237
250
channels : [ '#ionic' ]
238
251
} , function ( ) {
239
- client . say ( '#ionic' , buildConfig . releaseMessage ( ) , function ( ) {
252
+ client . say ( '#ionic' , argv . test ? 'This is a test.' : buildConfig . releaseMessage ( ) , function ( ) {
240
253
client . quit ( '' , done ) ;
241
254
} ) ;
242
255
} ) ;
243
256
} ) ;
244
257
258
+ gulp . task ( 'release-discourse' , function ( done ) {
259
+ var oldPostUrl = buildConfig . releasePostUrl ;
260
+ var newPostUrl ;
261
+
262
+ return makeChangelog ( {
263
+ standalone : true
264
+ } )
265
+ . then ( function ( changelog ) {
266
+ var content = 'Download Instructions: https://github.com/driftyco/ionic#quick-start\n\n' + changelog ;
267
+ return qRequest ( {
268
+ url : 'http://forum.ionicframework.com/posts' ,
269
+ method : 'post' ,
270
+ form : {
271
+ api_key : process . env . DISCOURSE_TOKEN ,
272
+ api_username : 'Ionitron' ,
273
+ title : argv . test ?
274
+ ( 'This is a test. ' + Date . now ( ) ) :
275
+ 'v' + pkg . version + ' "' + pkg . codename + '" released!' ,
276
+ raw : argv . test ?
277
+ ( 'This is a test. Again! ' + Date . now ( ) ) :
278
+ content
279
+ }
280
+ } ) ;
281
+ } )
282
+ . then ( function ( res ) {
283
+ var body = JSON . parse ( res . body ) ;
284
+ newPostUrl = 'http://forum.ionicframework.com/t/' + body . topic_slug + '/' + body . topic_id ;
285
+ fs . writeFileSync ( buildConfig . releasePostFile , newPostUrl ) ;
286
+
287
+ return q . all ( [
288
+ updatePost ( newPostUrl , 'closed' , true ) ,
289
+ updatePost ( newPostUrl , 'visible' , false ) ,
290
+ oldPostUrl && updatePost ( oldPostUrl , 'pinned' , true )
291
+ ] ) ;
292
+ } ) ;
293
+
294
+ function updatePost ( url , statusType , isEnabled ) {
295
+ return qRequest ( {
296
+ url : url + '/status' ,
297
+ method : 'put' ,
298
+ form : {
299
+ api_key : process . env . DISCOURSE_TOKEN ,
300
+ api_username : 'Ionitron' ,
301
+ status : statusType ,
302
+ enabled : ! ! isEnabled
303
+ }
304
+ } ) ;
305
+ }
306
+ } ) ;
307
+
245
308
function notContains ( disallowed ) {
246
309
disallowed = disallowed || [ ] ;
247
310
@@ -274,3 +337,11 @@ function pad(n) {
274
337
if ( n < 10 ) { return '0' + n ; }
275
338
return n ;
276
339
}
340
+ function qRequest ( opts ) {
341
+ var deferred = q . defer ( ) ;
342
+ request ( opts , function ( err , res , body ) {
343
+ if ( err ) deferred . reject ( err ) ;
344
+ else deferred . resolve ( res ) ;
345
+ } ) ;
346
+ return deferred . promise ;
347
+ }
0 commit comments