| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/usr/bin/env node
- import fs from 'fs';
- import path from 'path';
- import { spawnSync } from 'child_process';
- import { fileURLToPath } from 'url';
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
- const projectRoot = path.resolve(__dirname, '..');
- const prepareScript = path.join(projectRoot, 'scripts', 'prepare-electron-browsers.js');
- const iconScript = path.join(projectRoot, 'scripts', 'build-icon.js');
- const electronBuilderBin = path.join(
- projectRoot,
- 'node_modules',
- '.bin',
- process.platform === 'win32' ? 'electron-builder.cmd' : 'electron-builder'
- );
- const electronVersion = JSON.parse(
- fs.readFileSync(path.join(projectRoot, 'node_modules', 'electron', 'package.json'), 'utf8')
- ).version;
- const electronDistDir = path.join(projectRoot, '.electron-build', 'electron-dist');
- const rawArgs = process.argv.slice(2);
- const targets = rawArgs.filter((arg) => !arg.startsWith('--'));
- const allArch = rawArgs.includes('--all-arch');
- const buildArch = process.arch === 'arm64' ? 'arm64' : 'x64';
- const archFlag = buildArch === 'arm64' ? '--arm64' : '--x64';
- const builderArgs = ['--mac', ...(targets.length ? targets : ['dmg', 'zip'])];
- if (!allArch) builderArgs.push(archFlag);
- const env = {
- ...process.env,
- CSC_IDENTITY_AUTO_DISCOVERY: 'false',
- };
- function run(command, args) {
- return spawnSync(command, args, {
- cwd: projectRoot,
- stdio: 'inherit',
- env,
- });
- }
- function ensureElectronDistZip(arch) {
- fs.mkdirSync(electronDistDir, { recursive: true });
- const zipName = `electron-v${electronVersion}-darwin-${arch}.zip`;
- const zipPath = path.join(electronDistDir, zipName);
- if (fs.existsSync(zipPath) && fs.statSync(zipPath).size > 50 * 1024 * 1024) {
- return zipPath;
- }
- const url = `https://github.com/electron/electron/releases/download/v${electronVersion}/${zipName}`;
- const curlArgs = [
- '-L',
- '--fail',
- '--retry', '5',
- '--retry-delay', '2',
- '--continue-at', '-',
- '--output', zipPath,
- url,
- ];
- const result = run('curl', curlArgs);
- if (result.status !== 0) {
- process.exit(result.status || 1);
- }
- return zipPath;
- }
- const prepare = run(process.execPath, [prepareScript]);
- if (prepare.status !== 0) {
- process.exit(prepare.status || 1);
- }
- const iconBuild = run(process.execPath, [iconScript]);
- if (iconBuild.status !== 0) {
- process.exit(iconBuild.status || 1);
- }
- if (!allArch) {
- const zipPath = ensureElectronDistZip(buildArch);
- builderArgs.push(`-c.electronDist=${zipPath}`);
- }
- for (let attempt = 1; attempt <= 2; attempt++) {
- if (attempt > 1) {
- console.log(`[build-mac] Retry ${attempt}/2...`);
- }
- const result = run(electronBuilderBin, builderArgs);
- if (result.status === 0) {
- process.exit(0);
- }
- if (attempt === 2) {
- process.exit(result.status || 1);
- }
- }
|