116 lines
3.5 KiB
JavaScript
116 lines
3.5 KiB
JavaScript
const { spawn } = require('child_process');
|
|
const path = require('path');
|
|
const fs = require('fs/promises');
|
|
const process = require('process');
|
|
const packageJson = require('./package.json');
|
|
|
|
// Electron builder:
|
|
const electronBuilderPath = path.join('node_modules', 'electron-builder', 'cli.js');
|
|
|
|
// Parse command-line arguments:
|
|
const supportedPlatforms = ['win', 'mac', 'linux', 'mwl'];
|
|
const supportedArchitectures = ['x64', 'armv7l', 'arm64', 'ia32', 'universal'];
|
|
const args = process.argv.slice(2);
|
|
const carch = args.includes('--arch') ? args[args.indexOf('--arch') + 1] : null;
|
|
const cplatform = args.includes('--platform') ? args[args.indexOf('--platform') + 1] : null;
|
|
const pack = args.includes('--pack') || null;
|
|
|
|
let platform, arch, build_args;
|
|
|
|
//console.log(supportedPlatforms, supportedArchitectures, cplatform, carch);
|
|
|
|
// Platform Name:
|
|
if (cplatform == null) {
|
|
switch (process.platform) {
|
|
case "win32":
|
|
platform = "win";
|
|
break;
|
|
case "darwin":
|
|
platform = "mac";
|
|
break;
|
|
case "linux":
|
|
platform = "linux";
|
|
break;
|
|
default:
|
|
platform = "mwl"; // Build for all
|
|
break;
|
|
}
|
|
} else {
|
|
if (!supportedPlatforms.includes(cplatform)) {
|
|
console.error(`Invalid platform specified. Supported platforms: ${supportedPlatforms.join(', ')}`);
|
|
process.exit(1);
|
|
}
|
|
platform = cplatform;
|
|
}
|
|
|
|
// Platform Arch:
|
|
if (carch == null) {
|
|
arch = process.arch === "arm" ? "armv7l" : process.arch;
|
|
} else {
|
|
arch = carch;
|
|
if (!supportedArchitectures.includes(arch)) {
|
|
console.error(`Invalid arch specified. Supported architectures: ${supportedArchitectures.join(', ')}`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Generate artifact name:
|
|
const artifactname = `${packageJson.build.productName}-${packageJson.version}-${platform}-${arch}`;
|
|
|
|
(async () => {
|
|
try {
|
|
// Additional build arguments: (started wiht --eb-nmehere)
|
|
const additionalArgs = args.filter((arg, index) => arg.startsWith('--eb-') && index % 2 !== 0);
|
|
|
|
// CLI Args:
|
|
build_args = [
|
|
electronBuilderPath,
|
|
`--${platform}`,
|
|
`--${arch}`,
|
|
`-c.artifactName="${artifactname}.\${ext}"`,
|
|
];
|
|
|
|
// If additional args are present:
|
|
if (additionalArgs.length > 0) {
|
|
build_args.push(...additionalArgs);
|
|
}
|
|
|
|
// If pack is true:
|
|
if (pack) {
|
|
build_args.push(`--dir`);
|
|
}
|
|
|
|
// Make CLI:
|
|
const cli = `node ${build_args.join(' ')}`;
|
|
|
|
console.info(`CLI: ${cli}`);
|
|
console.info(`Building ${artifactname}`);
|
|
const process = spawn(cli, { shell: true });
|
|
|
|
// Log stdout as it comes
|
|
process.stdout.on('data', (data) => {
|
|
console.log(data.toString().trim());
|
|
});
|
|
|
|
// Log stderr as it comes
|
|
process.stderr.on('data', (data) => {
|
|
console.error(data.toString().trim());
|
|
});
|
|
|
|
// Handle process exit
|
|
process.on('close', (code) => {
|
|
if (code === 0) {
|
|
console.info(`Build completed successfully!`);
|
|
} else {
|
|
console.error(`Process exited with code ${code}`);
|
|
}
|
|
});
|
|
|
|
process.on('error', (error) => {
|
|
console.error(`Failed to start process: ${error.message}`);
|
|
});
|
|
} catch (error) {
|
|
console.error('An error occurred:', error);
|
|
process.exit(1);
|
|
}
|
|
})(); |