From dbc127be069de9035ac07f9f7bc193226394cd12 Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Mon, 12 Jan 2026 17:36:05 +0800 Subject: [PATCH] add retry for browser download error --- .../CHECK_AND_DOWNLOAD_DEPENDENCIES/index.ts | 1 + .../utils/puppeteer-executable/index.ts | 40 +++++++++++++------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/index.ts b/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/index.ts index 5894ec2..11c24fc 100644 --- a/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/index.ts +++ b/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/index.ts @@ -11,6 +11,7 @@ export enum DOWNLOAD_ERROR_EXIT_CODE { export const checkAndDownloadDependenciesForInit = async () => { process.on('disconnect', () => app.exit()) + process.on('uncaughtException', () => app.exit(DOWNLOAD_ERROR_EXIT_CODE.DOWNLOAD_ERROR)) app.dock?.hide() let pipe: null | fs.WriteStream = null try { diff --git a/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/utils/puppeteer-executable/index.ts b/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/utils/puppeteer-executable/index.ts index 2a2690b..5cf031a 100644 --- a/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/utils/puppeteer-executable/index.ts +++ b/packages/ui/src/main/flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/utils/puppeteer-executable/index.ts @@ -9,6 +9,7 @@ import { removeLastUsedAndAvailableBrowserPath } from '../browser-history' import gtag from '../../../../utils/gtag' +import { sleep } from '@geekgeekrun/utils/sleep.mjs'; const getPuppeteerManagerModule = async () => { const puppeteerManager = await import('@puppeteer/browsers') @@ -64,19 +65,32 @@ export const checkAndDownloadPuppeteerExecutable = async ( } catch { throw new Error('USER_CANCEL_DOWNLOAD_PUPPETEER') } - // maybe the exist installation is broken. - await puppeteerManager.uninstall({ - cacheDir, - buildId: EXPECT_CHROMIUM_BUILD_ID, - browser: puppeteerManager.Browser.CHROME - }) - installedBrowser = await puppeteerManager.install({ - browser: puppeteerManager.Browser.CHROME, - cacheDir, - buildId: EXPECT_CHROMIUM_BUILD_ID, - downloadProgressCallback: options.downloadProgressCallback, - baseUrl: `https://registry.npmmirror.com/-/binary/chrome-for-testing` - }) + let restRetriedTime = 10 + while (restRetriedTime > 0) { + try { + // maybe the exist installation is broken. + await puppeteerManager.uninstall({ + cacheDir, + buildId: EXPECT_CHROMIUM_BUILD_ID, + browser: puppeteerManager.Browser.CHROME + }) + installedBrowser = await puppeteerManager.install({ + browser: puppeteerManager.Browser.CHROME, + cacheDir, + buildId: EXPECT_CHROMIUM_BUILD_ID, + downloadProgressCallback: options.downloadProgressCallback, + baseUrl: `https://registry.npmmirror.com/-/binary/chrome-for-testing` + }) + break + } + catch (err) { + restRetriedTime-- + await sleep(5000) + } + } + if (!installedBrowser) { + throw new Error(`浏览器下载失败`) + } } else { gtag('use_installed_browser') installedBrowser = (