@@ -4,53 +4,188 @@ module.exports = function ( grunt ) {
44 var package = require ( "./package.json" ) ;
55
66 // Load NPM tasks so we can use them in our configuration
7+ grunt . loadNpmTasks ( "grunt-contrib-clean" ) ;
78 grunt . loadNpmTasks ( "grunt-contrib-compress" ) ;
89 grunt . loadNpmTasks ( "grunt-contrib-watch" ) ;
10+ grunt . loadNpmTasks ( "grunt-git" ) ;
911 grunt . loadNpmTasks ( "grunt-replace" ) ;
1012 grunt . loadNpmTasks ( "grunt-mkdir" ) ;
1113 grunt . loadNpmTasks ( "grunt-rsync" ) ;
1214
13- grunt . task . registerTask ( "init" , "initialize directories" , function ( ) {
14- grunt . config . set ( "mkdir.execute.options.create" , [ "dist" ] ) ;
15- grunt . task . run ( "mkdir:execute" ) ;
16- } ) ;
15+ grunt . task . registerTask ( "default" , "preform a full build" , [ "release" ] ) ;
1716
18- grunt . task . registerTask ( "deploy" , "sync to production environment" , function ( ) {
19- grunt . config . set ( "rsync" , {
20- options : {
21- args : [ "--quiet" ] ,
22- recursive : true
23- } ,
24- stage : {
25- options : {
26- src : "./src/app" ,
27- dest : "/Users/raffi/Desktop/Magento-2-Staging/" ,
28- delete : false
29- }
17+ grunt . task . registerTask ( "deploy" , "upload src contents to staging environment" , function ( ) {
18+ // Make sure that staging object is set in package JSON file
19+ if ( package . hasOwnProperty ( "staging" ) && package . staging . user . trim ( ) != ""
20+ && package . staging . host . trim ( ) != "" && package . staging . port . trim ( ) != ""
21+ && package . staging . dest . trim ( ) != "" ) {
22+ // Initialize the rsync option object
23+ var _rsync_options = {
24+ args : [ "-az" , "-o" , "-g" , "-e 'ssh -p " + package . staging . port + "'" ] ,
25+ exclude : [ ] ,
26+ recursive : true
3027 }
31- } ) ;
32- grunt . task . run ( "rsync:stage" ) ;
28+ // Save it into grunt config
29+ grunt . config . set ( "rsync.options" , _rsync_options ) ;
30+ // Traverse through jetrails dependencies
31+ package . jetrailsDependencies . forEach ( function ( dependency ) {
32+ // Extract the dependency name
33+ var name = dependency . match ( / \/ ( [ a - z A - Z 0 - 9 - ] * ) \. g i t $ / ) [ 1 ] . toLowerCase ( ) ;
34+ // Initialize the rsync dependencies options
35+ var _rsync_dependencies = {
36+ src : "lib/" + name + "/src/*" ,
37+ dest : package . staging . dest ,
38+ host : package . staging . user + "@" + package . staging . host
39+ }
40+ // Configure the dependency rsync options
41+ grunt . config . set ( "rsync." + name + ".options" , _rsync_dependencies ) ;
42+ // Run the dependencies task
43+ grunt . task . run ( "rsync:" + name + "" ) ;
44+ } ) ;
45+ // Initialize the rsync staging options
46+ var _rsync_staging = {
47+ src : "src/*" ,
48+ dest : package . staging . dest ,
49+ host : package . staging . user + "@" + package . staging . host
50+ }
51+ // Save it into grunt config
52+ grunt . config . set ( "rsync.staging.options" , _rsync_staging ) ;
53+ // Run the task and upload the main source files
54+ grunt . task . run ( "rsync:staging" ) ;
55+ }
56+ // Otherwise, report that we cannot deploy
57+ else {
58+ grunt . log . writeln ( "could not find staging details in package.json" ) ;
59+ }
3360 } ) ;
3461
35- grunt . task . registerTask ( "stream" , "watch all files and deploy on change" , function ( ) {
36- grunt . task . run ( "deploy" ) ;
37- grunt . config . set ( "watch" , {
38- src : {
39- files : [ "./src/**/*" ] ,
40- tasks : [ "deploy" ]
41- }
42- } ) ;
43- grunt . task . run ( "watch:src" ) ;
62+ grunt . task . registerTask ( "stream" , "watch src and lib folders, deploy on change" , function ( ) {
63+ // Initialize the watch task options
64+ grunt . config . set ( "watch.module.files" , [ "src/**/*" , "lib/*/src/**/*" ] ) ;
65+ grunt . config . set ( "watch.module.tasks" , [ "deploy" ] ) ;
66+ grunt . config . set ( "watch.module.options.spawn" , false ) ;
67+ // Run the task
68+ grunt . task . run ( "watch:module" ) ;
4469 } ) ;
4570
46- grunt . task . registerTask ( "version" , "update version as defined in package.json" , function ( ) {
71+ grunt . task . registerTask ( "version" , "update version, defined in package.json" , function ( ) {
72+ // Initialize the replacement patterns
73+ var _patterns = [
74+ {
75+ match : / ^ ( \s * \* \s + @ v e r s i o n \s + ) ( [ 0 - 9 ] + \. [ 0 - 9 ] + \. [ 0 - 9 ] + ) ( \s * ) $ / gm,
76+ replacement : "$1" + package . version + "$3"
77+ } ,
78+ {
79+ match : / ^ ( \s * < v e r s i o n > ) ( [ 0 - 9 ] + \. [ 0 - 9 ] + \. [ 0 - 9 ] + ) ( < \/ v e r s i o n > \s * ) $ / gm,
80+ replacement : "$1" + package . version + "$3"
81+ }
82+ ] ;
83+ // Initialize which files are effected
84+ var _files = [
85+ {
86+ expand : true ,
87+ flatten : false ,
88+ src : [ "src/**/*.php" , "src/**/*.phtml" , "src/**/*.xml" ] ,
89+ dest : "."
90+ }
91+ ] ;
92+ // Update the options in grunt config
93+ grunt . config . set ( "replace.version.options.patterns" , _patterns ) ;
94+ grunt . config . set ( "replace.version.files" , _files ) ;
95+ // Run the replace task
96+ grunt . task . run ( "replace:version" ) ;
97+ } ) ;
4798
99+ grunt . task . registerTask ( "init" , "initialize file structure" , function ( ) {
100+ // If no arguments are passed set the default config
101+ if ( arguments . length == 0 ) {
102+ grunt . config . set ( "mkdir.execute.options.create" , [ "src" , "dist" , "lib" ] ) ;
103+ grunt . task . run ( "mkdir:execute" ) ;
104+ }
105+ // Check to see if there is one argument
106+ else if ( arguments . length == 1 ) {
107+ grunt . config . set ( "mkdir.execute.options.create" , [ arguments [ 0 ] ] ) ;
108+ grunt . task . run ( "mkdir:execute" ) ;
109+ }
110+ // Warn user if there is more than one argument
111+ else {
112+ grunt . log . writeln ( this . name + ": No argument or one argument is valid" ) ;
113+ }
48114 } ) ;
49115
50- grunt . task . registerTask ( "package" , "compress module into zip file" , function ( ) {
116+ grunt . task . registerTask ( "nuke" , "clear generated file structure" , function ( ) {
117+ // If no arguments are passed set the default config
118+ if ( arguments . length == 0 ) {
119+ grunt . config . set ( "clean.execute" , [ "dist" , "lib" ] ) ;
120+ grunt . task . run ( "clean:execute" ) ;
121+ }
122+ // Check to see if there is one argument
123+ else if ( arguments . length == 1 ) {
124+ var paths = [ arguments [ 0 ] + "/**" , arguments [ 0 ] + "/.*" ] ;
125+ grunt . config . set ( "clean.execute" , paths ) ;
126+ grunt . task . run ( "clean:execute" ) ;
127+ }
128+ // Warn user if there is more than one argument
129+ else {
130+ grunt . log . writeln ( this . name + ": No argument or one argument is valid" ) ;
131+ }
132+ } ) ;
51133
134+ grunt . task . registerTask ( "resolve" , "downloads jetrails dependency extensions" , function ( ) {
135+ // Run the dependency command
136+ grunt . task . run ( "init" ) ;
137+ // Loop through all the dependencies
138+ package . jetrailsDependencies . forEach ( function ( dependency ) {
139+ // Extract the dependency name
140+ var name = dependency . match ( / \/ ( [ a - z A - Z 0 - 9 - ] * ) \. g i t $ / ) [ 1 ] . toLowerCase ( ) ;
141+ // Check to see if we already cloned the repository
142+ if ( grunt . file . exists ( "lib" , name ) ) {
143+ // Nuke it
144+ grunt . task . run ( "nuke:lib" ) ;
145+ }
146+ // Set the configuration, and clone it into lib
147+ grunt . task . run ( "init:lib/" + name ) ;
148+ grunt . config . set ( "gitclone." + name + ".options.repository" , dependency ) ;
149+ grunt . config . set ( "gitclone." + name + ".options.directory" , "lib/" + name ) ;
150+ grunt . task . run ( "gitclone:" + name ) ;
151+ } ) ;
52152 } ) ;
53153
54- grunt . task . registerTask ( "default" , "preform a full build" , [ "init" , "version" , "deploy" , "package" ] ) ;
154+ grunt . task . registerTask ( "release" , "prepares file structure for github release" , function ( ) {
155+ // Run the dependency tasks
156+ grunt . task . run ( "init" ) ;
157+ grunt . task . run ( "resolve" ) ;
158+ // Change version numbers
159+ grunt . task . run ( "version" ) ;
160+ // Clear dist folder
161+ grunt . task . run ( "nuke:dist" ) ;
162+ // Initialize the files array for compression
163+ var files = [ {
164+ cwd : "src" ,
165+ expand : true ,
166+ src : [ "**" ]
167+ } ] ;
168+ // Traverse through jetrails dependencies
169+ package . jetrailsDependencies . forEach ( function ( dependency ) {
170+ // Extract the dependency name
171+ var name = dependency . match ( / \/ ( [ a - z A - Z 0 - 9 - ] * ) \. g i t $ / ) [ 1 ] . toLowerCase ( ) ;
172+ // Append to the files array
173+ files . push ( {
174+ cwd : "lib/" + name + "/src" ,
175+ expand : true ,
176+ src : [ "**" ]
177+ } ) ;
178+ } ) ;
179+ // Define the output file
180+ var _output = package . name . replace ( "-" , "_" ) + ".zip" ;
181+ // Define other options
182+ grunt . config . set ( "compress.module.options.archive" , "dist/" + _output ) ;
183+ grunt . config . set ( "compress.module.options.mode" , "zip" ) ;
184+ grunt . config . set ( "compress.module.files" , files ) ;
185+ // Compress the module
186+ grunt . task . run ( "compress:module" ) ;
187+ // Nuke the lib folder
188+ grunt . task . run ( "nuke:lib" ) ;
189+ } ) ;
55190
56- }
191+ } ;
0 commit comments