add retry for browser download error

This commit is contained in:
geekgeekrun
2026-01-12 17:36:05 +08:00
parent 82f19d772d
commit dbc127be06
2 changed files with 28 additions and 13 deletions
@@ -11,6 +11,7 @@ export enum DOWNLOAD_ERROR_EXIT_CODE {
export const checkAndDownloadDependenciesForInit = async () => { export const checkAndDownloadDependenciesForInit = async () => {
process.on('disconnect', () => app.exit()) process.on('disconnect', () => app.exit())
process.on('uncaughtException', () => app.exit(DOWNLOAD_ERROR_EXIT_CODE.DOWNLOAD_ERROR))
app.dock?.hide() app.dock?.hide()
let pipe: null | fs.WriteStream = null let pipe: null | fs.WriteStream = null
try { try {
@@ -9,6 +9,7 @@ import {
removeLastUsedAndAvailableBrowserPath removeLastUsedAndAvailableBrowserPath
} from '../browser-history' } from '../browser-history'
import gtag from '../../../../utils/gtag' import gtag from '../../../../utils/gtag'
import { sleep } from '@geekgeekrun/utils/sleep.mjs';
const getPuppeteerManagerModule = async () => { const getPuppeteerManagerModule = async () => {
const puppeteerManager = await import('@puppeteer/browsers') const puppeteerManager = await import('@puppeteer/browsers')
@@ -64,19 +65,32 @@ export const checkAndDownloadPuppeteerExecutable = async (
} catch { } catch {
throw new Error('USER_CANCEL_DOWNLOAD_PUPPETEER') throw new Error('USER_CANCEL_DOWNLOAD_PUPPETEER')
} }
// maybe the exist installation is broken. let restRetriedTime = 10
await puppeteerManager.uninstall({ while (restRetriedTime > 0) {
cacheDir, try {
buildId: EXPECT_CHROMIUM_BUILD_ID, // maybe the exist installation is broken.
browser: puppeteerManager.Browser.CHROME await puppeteerManager.uninstall({
}) cacheDir,
installedBrowser = await puppeteerManager.install({ buildId: EXPECT_CHROMIUM_BUILD_ID,
browser: puppeteerManager.Browser.CHROME, browser: puppeteerManager.Browser.CHROME
cacheDir, })
buildId: EXPECT_CHROMIUM_BUILD_ID, installedBrowser = await puppeteerManager.install({
downloadProgressCallback: options.downloadProgressCallback, browser: puppeteerManager.Browser.CHROME,
baseUrl: `https://registry.npmmirror.com/-/binary/chrome-for-testing` 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 { } else {
gtag('use_installed_browser') gtag('use_installed_browser')
installedBrowser = ( installedBrowser = (