11'use strict' ;
22var markdown = require ( 'marked' ) ;
33var semver = require ( 'semver' ) ;
4+ var _s = require ( 'underscore.string' ) ;
5+ var shell = require ( 'shelljs' ) ;
6+ var process = require ( 'child_process' ) ;
7+ var Q = require ( 'q' ) ;
48
59module . exports = function ( grunt ) {
610 require ( 'load-grunt-tasks' ) ( grunt ) ;
711
812 grunt . initConfig ( {
13+ config : {
14+ demo : 'demo'
15+ } ,
916 pkg : grunt . file . readJSON ( 'package.json' ) ,
1017 changelog : {
1118 options : {
@@ -32,6 +39,17 @@ module.exports = function (grunt) {
3239 node : true
3340 } ,
3441 all : [ 'Gruntfile.js' , '*/index.js' ]
42+ } ,
43+ clean : {
44+ demo : {
45+ files : [ {
46+ dot : true ,
47+ src : [
48+ '<%= config.demo %>/*' ,
49+ '!<%= config.demo %>/dist'
50+ ]
51+ } ]
52+ }
3553 }
3654 } ) ;
3755
@@ -63,5 +81,55 @@ module.exports = function (grunt) {
6381 } , grunt . task . current . async ( ) ) ;
6482 } ) ;
6583
84+ grunt . registerTask ( 'generate' , 'generate demo' , function ( ) {
85+ var done = this . async ( ) ;
86+
87+ shell . cd ( grunt . config ( 'config' ) . demo ) ;
88+
89+ Q ( )
90+ . then ( generateDemo )
91+ . then ( gruntRelease )
92+ . catch ( function ( msg ) {
93+ grunt . fail . warn ( msg || 'failed to generate demo' )
94+ } )
95+ . finally ( done ) ;
96+
97+ function generateDemo ( ) {
98+ var deferred = Q . defer ( ) ;
99+ var generator = shell . exec ( 'yo angular-fullstack' , { async :true } ) ;
100+
101+ generator . stdout . on ( 'data' , function ( data ) {
102+ if ( _s . include ( data , '[?]' ) ) {
103+ generator . stdin . write ( '\n' ) ;
104+ }
105+ grunt . verbose . writeln ( data ) ;
106+ } ) ;
107+
108+ generator . on ( 'close' , function ( code ) {
109+ deferred . resolve ( ) ;
110+ } ) ;
111+
112+ return deferred . promise ;
113+ }
114+
115+ function gruntRelease ( ) {
116+ var deferred = Q . defer ( ) ;
117+ var generator = shell . exec ( 'grunt build' , { async :true } ) ;
118+ generator . stdout . on ( 'data' , function ( data ) {
119+ grunt . verbose . writeln ( data ) ;
120+ } ) ;
121+ generator . on ( 'exit' , function ( code ) {
122+ deferred . resolve ( ) ;
123+ } ) ;
124+
125+ return deferred . promise ;
126+ }
127+ } ) ;
128+
129+ grunt . registerTask ( 'demo' , [
130+ 'clean:demo' ,
131+ 'generate'
132+ ] ) ;
133+
66134 //grunt.registerTask('default', ['bump', 'changelog', 'stage', 'release']);
67135} ;
0 commit comments