@@ -6,53 +6,127 @@ const file = require('gulp-file');
6
6
const merge2 = require ( 'merge2' ) ;
7
7
8
8
const package = require ( './package.json' ) ;
9
- const generateReadme = require ( './helpers/bundle-readme.generator' ) ;
10
9
10
+ const README_INDENT = ' ' ;
11
+ const README_INSTALLATION_TEXT = 'Extract addons and resources to cstrike folder' ;
11
12
const WORK_DIR = process . cwd ( ) ;
12
13
const DIST_DIR = path . join ( WORK_DIR , './dist' ) ;
14
+ const DIST_BUILD_DIR = path . join ( DIST_DIR , 'build' ) ;
13
15
const BUILD_DIR = path . join ( DIST_DIR , 'bundles' ) ;
14
- const REAPI_DIST_DIR = path . join ( DIST_DIR , 'reapi' ) ;
16
+ const BUILD_METADATA_FILE = path . join ( DIST_DIR , 'bundles' , 'files.json' ) ;
17
+ const SDK_DIR = path . join ( WORK_DIR , 'sdk' ) ;
18
+ const ASSETS_DIR = path . join ( WORK_DIR , 'assets' ) ;
15
19
16
- if ( ! fs . existsSync ( REAPI_DIST_DIR ) ) {
17
- throw new Error ( 'Build ReAPI project before packing' ) ;
20
+ if ( ! fs . existsSync ( DIST_BUILD_DIR ) ) {
21
+ throw new Error ( 'Build project before packing' ) ;
22
+ }
23
+
24
+ function isDirEmpty ( dir ) {
25
+ if ( ! fs . existsSync ( dir ) ) {
26
+ return true ;
27
+ }
28
+
29
+ const files = fs . readdirSync ( dir ) ;
30
+
31
+ return ! files . length ;
32
+ }
33
+
34
+ function generateReadme ( files ) {
35
+ const filesArr = Object . keys ( files ) . map ( key => {
36
+ const { name, description } = files [ key ] ;
37
+ return { key, name, description } ;
38
+ } ) ;
39
+
40
+ const fileMaxLength = Math . max (
41
+ ...filesArr . map ( file => file . name . length )
42
+ ) ;
43
+
44
+ const resolvedFiles = filesArr . map ( file => {
45
+ const { name, description } = file ;
46
+
47
+ if ( ! description ) {
48
+ return ;
49
+ }
50
+
51
+ const spacesNum = Math . max ( fileMaxLength - name . length , 0 ) ;
52
+ const spaces = ' ' . repeat ( spacesNum ) ;
53
+
54
+ return `${ README_INDENT } ${ name } ${ spaces } - ${ description } `
55
+ } ) . filter ( Boolean ) . join ( '\n' ) ;
56
+
57
+ return [
58
+ '[INSTALLATION]' ,
59
+ `${ README_INDENT } ${ README_INSTALLATION_TEXT } ` ,
60
+ '' ,
61
+ '[FILES]' ,
62
+ resolvedFiles
63
+ ] . join ( '\n' ) ;
18
64
}
19
65
20
66
const resolveArchiveName = ( sufix ) => `${ package . name } -${ package . version . replace ( / \. / g, '' ) } -${ sufix } .zip` ;
21
67
22
68
const FILES = {
23
- bundleArchive : resolveArchiveName ( 'bundle' ) ,
24
69
srcArchive : resolveArchiveName ( 'addons-src' ) ,
25
- addonsArchive : resolveArchiveName ( 'addons-build' ) ,
26
- resourcesArchive : resolveArchiveName ( 'resources' ) ,
27
- sdkArchive : resolveArchiveName ( 'sdk' ) ,
28
- readme : 'README.TXT'
70
+ buildArchive : resolveArchiveName ( 'addons-build' ) ,
71
+ resourcesArchive : ! isDirEmpty ( ASSETS_DIR ) ? resolveArchiveName ( 'resources' ) : null ,
72
+ sdkArchive : ! isDirEmpty ( SDK_DIR ) ? resolveArchiveName ( 'sdk' ) : null ,
73
+ readme : 'README.TXT' ,
74
+ bundleArchive : resolveArchiveName ( 'bundle' )
29
75
} ;
30
76
31
77
const BUNDLE_FILES = [
32
- { name : FILES . addonsArchive , description : 'compiled plugins and source code' } ,
33
- { name : FILES . resourcesArchive , description : 'mod resources' } ,
34
- { name : FILES . sdkArchive , description : 'mod sdk' }
78
+ { name : FILES . buildArchive , description : 'compiled plugins and source code' }
35
79
] ;
36
80
81
+ if ( FILES . resourcesArchive ) {
82
+ BUNDLE_FILES . push ( { name : FILES . resourcesArchive , description : 'mod resources' } ) ;
83
+ }
84
+
85
+ if ( FILES . sdkArchive ) {
86
+ BUNDLE_FILES . push ( { name : FILES . sdkArchive , description : 'mod sdk' } ) ;
87
+ }
88
+
37
89
gulp . task ( 'pack:bundles' , ( ) => {
38
90
const dirPatterns = {
39
- all : REAPI_DIST_DIR + '/**' ,
40
- addons : REAPI_DIST_DIR + '/addons{,/**}' ,
41
- plugins : REAPI_DIST_DIR + '/addons/amxmodx/plugins{,/**}' ,
42
- modules : REAPI_DIST_DIR + '/addons/amxmodx/modules{,/**}' ,
43
- sdk : WORK_DIR + '/sdk /**'
91
+ all : DIST_BUILD_DIR + '/**' ,
92
+ addons : DIST_BUILD_DIR + '/addons{,/**}' ,
93
+ plugins : DIST_BUILD_DIR + '/addons/amxmodx/plugins{,/**}' ,
94
+ modules : DIST_BUILD_DIR + '/addons/amxmodx/modules{,/**}' ,
95
+ sdk : SDK_DIR + '/**'
44
96
} ;
45
97
98
+ const zipTasks = [
99
+ (
100
+ gulp
101
+ . src ( [ dirPatterns . addons , '!' + dirPatterns . plugins , '!' + dirPatterns . modules ] )
102
+ . pipe ( zip ( FILES . srcArchive ) )
103
+ ) ,
104
+ (
105
+ gulp
106
+ . src ( [ dirPatterns . addons ] )
107
+ . pipe ( zip ( FILES . buildArchive ) )
108
+ )
109
+ ] ;
110
+
111
+ if ( FILES . resourcesArchive ) {
112
+ zipTasks . push (
113
+ gulp
114
+ . src ( [ dirPatterns . all , '!' + dirPatterns . addons ] )
115
+ . pipe ( zip ( FILES . resourcesArchive ) )
116
+ ) ;
117
+ }
118
+
119
+ if ( FILES . sdkArchive ) {
120
+ zipTasks . push (
121
+ gulp
122
+ . src ( [ dirPatterns . sdk ] )
123
+ . pipe ( zip ( FILES . sdkArchive ) )
124
+ ) ;
125
+ }
126
+
46
127
return merge2 ( [
47
- gulp . src ( [ dirPatterns . addons , '!' + dirPatterns . plugins , '!' + dirPatterns . modules ] )
48
- . pipe ( zip ( FILES . srcArchive ) ) ,
49
- gulp . src ( [ dirPatterns . addons ] )
50
- . pipe ( zip ( FILES . addonsArchive ) ) ,
51
- gulp . src ( [ dirPatterns . all , '!' + dirPatterns . addons ] )
52
- . pipe ( zip ( FILES . resourcesArchive ) ) ,
53
- gulp . src ( [ dirPatterns . sdk ] )
54
- . pipe ( zip ( FILES . sdkArchive ) ) ,
55
- file ( FILES . readme , generateReadme ( BUNDLE_FILES ) , { src : true } )
128
+ ...zipTasks ,
129
+ file ( FILES . readme , generateReadme ( BUNDLE_FILES ) , { src : true } )
56
130
] ) . pipe ( gulp . dest ( BUILD_DIR ) ) ;
57
131
} ) ;
58
132
@@ -62,6 +136,10 @@ gulp.task('pack:full', () => {
62
136
return gulp . src ( bundleFiles )
63
137
. pipe ( zip ( FILES . bundleArchive ) )
64
138
. pipe ( gulp . dest ( BUILD_DIR ) )
65
- } )
139
+ } ) ;
140
+
141
+ gulp . task ( 'pack:metadata' , cb => {
142
+ fs . writeFile ( BUILD_METADATA_FILE , JSON . stringify ( FILES ) , cb ) ;
143
+ } ) ;
66
144
67
- gulp . task ( 'default' , gulp . series ( 'pack:bundles' , 'pack:full' ) ) ;
145
+ gulp . task ( 'default' , gulp . series ( 'pack:bundles' , 'pack:full' , 'pack:metadata' ) ) ;
0 commit comments