1
1
import { exec } from 'node:child_process' ;
2
- import { readFileSync } from 'node:fs' ;
2
+ import { readdirSync , readFileSync , statSync } from 'node:fs' ;
3
3
import { cp } from 'node:fs/promises' ;
4
4
import { join } from 'node:path' ;
5
5
import { promisify } from 'node:util' ;
6
6
7
7
const root = new URL ( '../' , import . meta. url ) . pathname ;
8
+ const dist = join ( root , 'dist' , 'cli' ) ;
8
9
const version = JSON . parse ( readFileSync ( join ( root , 'package.json' ) , 'utf8' ) ) . version ;
9
10
const cliDirectory = join ( root , 'cli' ) ;
10
- const binaries : { os : string ; arch : string ; fileName : string } [ ] = [
11
+ const binaries : { os : string ; arch : string ; fileName : string , alias ?: string } [ ] = [
11
12
{ os : 'windows' , arch : '386' , fileName : 'ngssc_32bit.exe' } ,
12
- { os : 'windows' , arch : 'amd64' , fileName : 'ngssc_64bit.exe' } ,
13
+ { os : 'windows' , arch : 'amd64' , fileName : 'ngssc_amd64.exe' , alias : ' ngssc_64bit.exe' } ,
13
14
{ os : 'linux' , arch : '386' , fileName : 'ngssc_32bit' } ,
14
- { os : 'linux' , arch : 'amd64' , fileName : 'ngssc_64bit' } ,
15
- { os : 'darwin' , arch : 'amd64' , fileName : 'ngssc_darwin_64bit' } ,
15
+ { os : 'linux' , arch : 'amd64' , fileName : 'ngssc_amd64' , alias : 'ngssc_64bit' } ,
16
+ { os : 'linux' , arch : 'arm64' , fileName : 'ngssc_arm64' } ,
17
+ { os : 'darwin' , arch : 'amd64' , fileName : 'ngssc_darwin_amd64' , alias : 'ngssc_darwin_64bit' } ,
18
+ { os : 'darwin' , arch : 'arm64' , fileName : 'ngssc_darwin_arm64' } ,
16
19
] ;
17
20
const buildUpx = process . argv [ 2 ] === 'upx' ;
18
21
19
22
const asyncExec = promisify ( exec ) ;
20
23
await Promise . all (
21
24
binaries . map ( async ( binary ) => {
22
- const binaryDist = join ( root , ' dist' , 'cli' , binary . fileName ) ;
25
+ const binaryDist = join ( dist , binary . fileName ) ;
23
26
console . log ( `Building for ${ binary . os } ${ binary . arch } ` ) ;
24
27
await asyncExec (
25
28
`go build -ldflags="-s -w -X main.CliVersion=${ version } " -buildvcs=false -o ${ binaryDist } ` ,
@@ -32,20 +35,28 @@ await Promise.all(
32
35
} ,
33
36
} ,
34
37
) ;
35
- console . log ( `Finished building for ${ binary . os } ${ binary . arch } ` ) ;
38
+ console . log ( `Finished building for ${ binary . os } ${ binary . arch } : ${ binary . fileName } ` ) ;
39
+ if ( binary . alias ) {
40
+ await cp ( binaryDist , join ( dist , binary . alias ) ) ;
41
+ console . log ( `Created alias for ${ binary . os } ${ binary . arch } : ${ binary . alias } ` ) ;
42
+ }
36
43
37
44
if ( buildUpx ) {
38
45
const [ fileName , extension ] = binary . fileName . split ( '.' ) ;
39
- const minBinaryDist = join (
40
- root ,
41
- 'dist' ,
42
- 'cli' ,
43
- `${ fileName } _min${ extension ? `.${ extension } ` : '' } ` ,
44
- ) ;
46
+ const minFileName = `${ fileName } _min${ extension ? `.${ extension } ` : '' } ` ;
47
+ const minBinaryDist = join ( dist , minFileName ) ;
45
48
console . log ( `Building upx binary for ${ binary . os } ${ binary . arch } ` ) ;
46
49
await cp ( binaryDist , minBinaryDist ) ;
47
50
await asyncExec ( `upx --brute ${ minBinaryDist } ` ) ;
48
- console . log ( `Finished compressing binary for ${ binary . os } ${ binary . arch } ` ) ;
51
+ console . log ( `Finished compressing binary for ${ binary . os } ${ binary . arch } : ${ minFileName } ` ) ;
52
+ if ( binary . alias ) {
53
+ const [ fileName , extension ] = binary . alias . split ( '.' ) ;
54
+ const aliasFileName = `${ fileName } _min${ extension ? `.${ extension } ` : '' } ` ;
55
+ await cp ( minBinaryDist , join ( dist , aliasFileName ) ) ;
56
+ console . log ( `Created alias for compressed ${ binary . os } ${ binary . arch } : ${ aliasFileName } ` ) ;
57
+ }
49
58
}
50
59
} ) ,
51
60
) ;
61
+
62
+ console . table ( readdirSync ( dist ) . sort ( ) . reduce ( ( current , next ) => Object . assign ( current , { [ next ] : statSync ( join ( dist , next ) ) . size } ) , { } as Record < string , number > ) ) ;
0 commit comments