Skip to content

Commit 4323913

Browse files
authored
feat: add arm support (#103)
This PR adds a new naming pattern for the binaries and adds new ARM binaries. DEPRECATION NOTICE: The 32 bit and minified binaries are now considered deprecated and will be removed with the next major release.
1 parent 7aae9fb commit 4323913

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

scripts/build-cli.mts

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
11
import { exec } from 'node:child_process';
2-
import { readFileSync } from 'node:fs';
2+
import { readdirSync, readFileSync, statSync } from 'node:fs';
33
import { cp } from 'node:fs/promises';
44
import { join } from 'node:path';
55
import { promisify } from 'node:util';
66

77
const root = new URL('../', import.meta.url).pathname;
8+
const dist = join(root, 'dist', 'cli');
89
const version = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).version;
910
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 }[] = [
1112
{ 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' },
1314
{ 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' },
1619
];
1720
const buildUpx = process.argv[2] === 'upx';
1821

1922
const asyncExec = promisify(exec);
2023
await Promise.all(
2124
binaries.map(async (binary) => {
22-
const binaryDist = join(root, 'dist', 'cli', binary.fileName);
25+
const binaryDist = join(dist, binary.fileName);
2326
console.log(`Building for ${binary.os} ${binary.arch}`);
2427
await asyncExec(
2528
`go build -ldflags="-s -w -X main.CliVersion=${version}" -buildvcs=false -o ${binaryDist}`,
@@ -32,20 +35,28 @@ await Promise.all(
3235
},
3336
},
3437
);
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+
}
3643

3744
if (buildUpx) {
3845
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);
4548
console.log(`Building upx binary for ${binary.os} ${binary.arch}`);
4649
await cp(binaryDist, minBinaryDist);
4750
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+
}
4958
}
5059
}),
5160
);
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

Comments
 (0)