-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.js
More file actions
127 lines (110 loc) · 3.88 KB
/
build.js
File metadata and controls
127 lines (110 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/env node
/**
* Cross-platform build script for maiass
* Builds binaries for all supported platforms and architectures
*/
import { execSync } from 'child_process';
import fs from 'fs';
import path from 'path';
import colors from './lib/colors.js';
const targets = [
'node18-macos-x64',
'node18-macos-arm64',
'node18-linux-x64',
'node18-linux-arm64',
'node18-win-x64',
'node18-win-arm64'
];
const platformNames = {
'node18-macos-x64': 'macOS Intel',
'node18-macos-arm64': 'macOS Apple Silicon',
'node18-linux-x64': 'Linux x64',
'node18-linux-arm64': 'Linux ARM64',
'node18-win-x64': 'Windows x64',
'node18-win-arm64': 'Windows ARM64'
};
function buildForTarget(target) {
console.log(colors.BBlue(`Building for ${platformNames[target]}...`));
// Map target to output filename
const outputNames = {
'node18-macos-x64': 'maiass-macos-x64',
'node18-macos-arm64': 'maiass-macos-arm64',
'node18-linux-x64': 'maiass-linux-x64',
'node18-linux-arm64': 'maiass-linux-arm64',
'node18-win-x64': 'maiass-win-x64.exe',
'node18-win-arm64': 'maiass-win-arm64.exe'
};
const outputName = outputNames[target];
const outputPath = `build/${outputName}`;
try {
execSync(`npx pkg . --target ${target} --output ${outputPath}`, {
stdio: 'inherit',
encoding: 'utf8'
});
console.log(colors.Green(`✓ Successfully built for ${platformNames[target]} -> ${outputName}`));
// Code sign macOS binaries
if (target.includes('macos') && process.platform === 'darwin') {
try {
console.log(colors.BBlue(` 🔐 Code signing ${outputName}...`));
execSync(`./scripts/codesign.sh "${outputPath}"`, { stdio: 'pipe' });
console.log(colors.Green(` ✓ Code signed ${outputName}`));
} catch (error) {
console.log(colors.Yellow(` ⚠️ Code signing failed for ${outputName} (continuing without signing)`));
console.log(colors.Gray(` ${error.message.split('\n')[0]}`));
}
}
// Code sign Windows binaries
if (target.includes('win')) {
try {
console.log(colors.BBlue(` 🔐 Code signing ${outputName}...`));
execSync(`./scripts/codesign-windows.sh "${outputPath}"`, { stdio: 'pipe' });
console.log(colors.Green(` ✓ Code signed ${outputName}`));
} catch (error) {
console.log(colors.Yellow(` ⚠️ Windows code signing failed for ${outputName} (continuing without signing)`));
console.log(colors.Gray(` ${error.message.split('\n')[0]}`));
}
}
return true;
} catch (error) {
console.log(colors.Red(`✗ Failed to build for ${platformNames[target]}: ${error.message}`));
return false;
}
}
function main() {
console.log(colors.Aqua('MAIASS Cross-Platform Build'));
console.log(colors.White('Building binaries for all supported platforms...\n'));
// Ensure build directory exists and is clean
if (fs.existsSync('build')) {
// Clean the build directory
const files = fs.readdirSync('build');
for (const file of files) {
if (file !== '.DS_Store') {
fs.unlinkSync(path.join('build', file));
}
}
} else {
fs.mkdirSync('build');
}
let successful = 0;
let failed = 0;
for (const target of targets) {
if (buildForTarget(target)) {
successful++;
} else {
failed++;
}
console.log(''); // Add spacing between builds
}
console.log(colors.White('\n=== Build Summary ==='));
console.log(colors.Green(`Successful builds: ${successful}`));
if (failed > 0) {
console.log(colors.Red(`Failed builds: ${failed}`));
}
if (successful === targets.length) {
console.log(colors.Green('\n🎉 All builds completed successfully!'));
console.log(colors.White('Binaries are available in the build/ directory'));
} else {
console.log(colors.Yellow('\n⚠️ Some builds failed. Check the output above for details.'));
}
}
main();