1
1
const path = require ( "path" ) ;
2
2
const pkg = require ( "./package.json" ) ;
3
3
const cp = require ( "child_process" ) ;
4
+ const crypto = require ( "crypto" ) ;
5
+ const fs = require ( "fs" ) ;
6
+ const os = require ( "os" ) ;
7
+
8
+ const PATH_DIST = path . resolve ( process . cwd ( ) , "dist" ) ;
9
+ const PATH_BUILD = path . resolve ( process . cwd ( ) , "build" ) ;
10
+
11
+ process . env = Object . assign ( {
12
+ NODE_ENV : "production"
13
+ } , process . env ) ;
4
14
5
15
module . exports = function ( grunt ) {
6
16
7
17
// Project configuration.
8
18
grunt . initConfig ( {
9
19
pkg,
10
- env : {
11
- options : {
12
- //Shared Options Hash
13
- } ,
14
- prod : {
15
- NODE_ENV : "production" ,
16
- }
17
- } ,
18
20
uglify : {
19
- /*
20
21
// NOTE: if true, this truncate variables&class names
21
22
// Are original names neede for production?!
22
23
// i dont thinks so, its only usefull in development
23
24
options : {
24
- mangle: false
25
- },*/
25
+ mangle : {
26
+ toplevel : true
27
+ }
28
+ } ,
26
29
build : {
27
30
files : [ {
28
31
expand : true ,
@@ -37,85 +40,52 @@ module.exports = function (grunt) {
37
40
"!scripts/**" ,
38
41
"!tests/**"
39
42
] ,
40
- dest : path . join ( process . cwd ( ) , "dist" ) ,
43
+ dest : PATH_BUILD ,
41
44
//cwd: process.cwd()
42
45
} ]
43
46
}
44
- } ,
45
- run : {
46
- install : {
47
- options : {
48
- cwd : path . join ( process . cwd ( ) , "dist" )
49
- } ,
50
- cmd : "npm" ,
51
- args : [
52
- "install" ,
53
- "--prod-only"
54
- ]
55
- } ,
56
- clean : {
57
- cmd : "rm" ,
58
- args : [
59
- "-rf" ,
60
- "./dist"
61
- ]
62
- } ,
63
- copy : {
64
- exec : "cp ./package*.json ./dist"
65
- } ,
66
- folder : {
67
- exec : "mkdir ./dist/logs && mkdir ./dist/plugins"
68
- } ,
69
- "scripts-mock" : {
70
- exec : "mkdir ./dist/scripts && echo 'exit 0' > ./dist/scripts/post-install.sh && chmod +x ./dist/scripts/post-install.sh"
71
- } ,
72
- "scripts-cleanup" : {
73
- exec : "rm ./dist/scripts/post-install.sh && rmdir ./dist/scripts"
74
- }
75
- } ,
76
- compress : {
77
- main : {
78
- options : {
79
- archive : `backend-v${ pkg . version } .tgz`
80
- } ,
81
- files : [ {
82
- expand : true ,
83
- src : "**/*" ,
84
- cwd : "dist/"
85
- } ]
86
- }
87
47
}
88
48
} ) ;
89
49
90
- // Load the plugin that provides the "uglify" task.
91
50
grunt . loadNpmTasks ( "grunt-contrib-uglify" ) ;
92
- grunt . loadNpmTasks ( "grunt-run" ) ;
93
- grunt . loadNpmTasks ( "grunt-contrib-compress" ) ;
94
- grunt . loadNpmTasks ( "grunt-env" ) ;
95
-
96
- grunt . registerTask ( "clean" , [ "run:clean" ] ) ;
97
-
98
- grunt . registerTask ( "build" , [
99
- "run:clean" ,
100
- "env:prod" ,
101
- "uglify" ,
102
- "run:folder" ,
103
- "run:copy" ,
104
- ] ) ;
105
-
106
- // install npm dependencies
107
- grunt . registerTask ( "install" , [
108
- "env:prod" ,
109
- "run:scripts-mock" ,
110
- "run:install" ,
111
- "run:scripts-cleanup"
112
- ] ) ;
113
-
114
- grunt . registerTask ( "bundle" , [
115
- "build" ,
116
- "install" ,
117
- "compress"
118
- ] ) ;
51
+
52
+
53
+ grunt . registerTask ( "build" , ( ) => {
54
+ [
55
+ `rm -rf ${ path . join ( PATH_BUILD , "/*" ) } ` ,
56
+ `rm -rf ${ path . join ( PATH_DIST , "/*" ) } ` ,
57
+ `mkdir -p ${ PATH_BUILD } ` ,
58
+ `mkdir ${ path . join ( PATH_BUILD , "logs" ) } ` ,
59
+ `mkdir ${ path . join ( PATH_BUILD , "plugins" ) } ` ,
60
+ `mkdir ${ path . join ( PATH_BUILD , "scripts" ) } ` ,
61
+ `echo "exit 0" > ${ path . join ( PATH_BUILD , "scripts/post-install.sh" ) } ` ,
62
+ `chmod +x ${ path . join ( PATH_BUILD , "scripts/post-install.sh" ) } ` ,
63
+ `cp ./package*.json ${ PATH_BUILD } ` ,
64
+ "grunt uglify" ,
65
+ ] . forEach ( ( cmd ) => {
66
+ cp . execSync ( cmd , {
67
+ env : process . env ,
68
+ stdio : "inherit"
69
+ } ) ;
70
+ } ) ;
71
+ } ) ;
72
+
73
+
74
+ grunt . registerTask ( "install" , ( ) => {
75
+ cp . execSync ( `cd ${ PATH_BUILD } && npm install --prod-only` , {
76
+ env : process . env ,
77
+ stdio : "inherit"
78
+ } ) ;
79
+ } ) ;
80
+
81
+
82
+ grunt . registerTask ( "compress" , ( ) => {
83
+ cp . execSync ( `cd ${ PATH_BUILD } && tar -czvf ${ path . join ( PATH_DIST , `${ pkg . name } -v${ pkg . version } .tgz` ) } *` , {
84
+ env : process . env ,
85
+ stdio : "inherit"
86
+ } ) ;
87
+ } ) ;
88
+
119
89
120
90
grunt . registerTask ( "build:docker" , ( ) => {
121
91
cp . execSync ( `docker build . -t openhaus/${ pkg . name } :latest --build-arg version=${ pkg . version } ` , {
@@ -124,15 +94,40 @@ module.exports = function (grunt) {
124
94
} ) ;
125
95
} ) ;
126
96
97
+
98
+ grunt . registerTask ( "checksum" , ( ) => {
99
+
100
+ let m5f = path . join ( PATH_DIST , "./checksums.md5" ) ;
101
+
102
+ fs . rmSync ( m5f , { force : true } ) ;
103
+ let files = fs . readdirSync ( PATH_DIST ) ;
104
+ let fd = fs . openSync ( m5f , "w" ) ;
105
+
106
+ files . forEach ( ( name ) => {
107
+
108
+ let file = path . join ( PATH_DIST , name ) ;
109
+ let content = fs . readFileSync ( file ) ;
110
+ let hasher = crypto . createHash ( "md5" ) ;
111
+ let hash = hasher . update ( content ) . digest ( "hex" ) ;
112
+ fs . writeSync ( fd , `${ hash } \t${ name } ${ os . EOL } ` ) ;
113
+
114
+ } ) ;
115
+
116
+ fs . closeSync ( fd ) ;
117
+
118
+ } ) ;
119
+
120
+
127
121
grunt . registerTask ( "release" , ( ) => {
128
122
[
129
- "rm -rf ./dist/*" ,
130
- "npm run build" ,
131
- "npm run build:docker" ,
132
- `docker save openhaus/frontend:latest | gzip > ./${ pkg . name } -v${ pkg . version } -docker.tgz` ,
123
+ `mkdir -p ${ PATH_DIST } ` ,
124
+ "grunt build" ,
133
125
"grunt compress" ,
134
- `cd dist && NODE_ENV=production npm install --prod-only --ignore-scripts` ,
135
- `cd dist && tar -czvf ../${ pkg . name } -v${ pkg . version } -bundle.tgz *`
126
+ "grunt build:docker" ,
127
+ `docker save openhaus/${ pkg . name } :latest | gzip > ${ path . join ( PATH_DIST , `${ pkg . name } -v${ pkg . version } -docker.tgz` ) } ` ,
128
+ "grunt install" ,
129
+ `cd ${ PATH_BUILD } && tar -czvf ${ path . join ( PATH_DIST , `${ pkg . name } -v${ pkg . version } -bundle.tgz` ) } *` ,
130
+ "grunt checksum"
136
131
] . forEach ( ( cmd ) => {
137
132
cp . execSync ( cmd , {
138
133
env : process . env ,
@@ -141,9 +136,5 @@ module.exports = function (grunt) {
141
136
} ) ;
142
137
} ) ;
143
138
144
- // Default task(s).
145
- //grunt.registerTask("default", ["uglify"]);
146
- //grunt.registerTask("install", ["install"]);
147
- //grunt.registerTask("compress", ["compress"]);
148
139
149
140
} ;
0 commit comments