From d71e8b4b42544d8b2536c70abf56ae02c968f33f Mon Sep 17 00:00:00 2001 From: Juwon Jung Date: Wed, 4 Sep 2024 17:32:05 +0900 Subject: [PATCH] Move retry util function to `builder-util-runtime` --- packages/builder-util-runtime/src/index.ts | 1 + packages/builder-util-runtime/src/retry.ts | 15 +++++++++++++++ packages/builder-util/src/util.ts | 16 ++++------------ packages/electron-updater/package.json | 1 - packages/electron-updater/src/AppUpdater.ts | 2 +- pnpm-lock.yaml | 3 --- 6 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 packages/builder-util-runtime/src/retry.ts diff --git a/packages/builder-util-runtime/src/index.ts b/packages/builder-util-runtime/src/index.ts index c6c793f2be9..2947b1be854 100644 --- a/packages/builder-util-runtime/src/index.ts +++ b/packages/builder-util-runtime/src/index.ts @@ -37,6 +37,7 @@ export { parseXml, XElement } from "./xml" export { BlockMap } from "./blockMapApi" export { newError } from "./error" export { MemoLazy } from "./MemoLazy" +export { retry } from "./retry" // nsis export const CURRENT_APP_INSTALLER_FILE_NAME = "installer.exe" diff --git a/packages/builder-util-runtime/src/retry.ts b/packages/builder-util-runtime/src/retry.ts new file mode 100644 index 00000000000..b72f9b7c388 --- /dev/null +++ b/packages/builder-util-runtime/src/retry.ts @@ -0,0 +1,15 @@ +import { CancellationToken } from "./CancellationToken" + +export async function retry(task: () => Promise, retryCount: number, interval: number, backoff = 0, attempt = 0, shouldRetry?: (e: any) => boolean): Promise { + const cancellationToken = new CancellationToken() + try { + return await task() + } catch (error: any) { + if ((shouldRetry?.(error) ?? true) && retryCount > 0 && !cancellationToken.cancelled) { + await new Promise(resolve => setTimeout(resolve, interval + backoff * attempt)) + return await retry(task, retryCount - 1, interval, backoff, attempt + 1, shouldRetry) + } else { + throw error + } + } +} diff --git a/packages/builder-util/src/util.ts b/packages/builder-util/src/util.ts index 5a09a0e0939..0bc464579e5 100644 --- a/packages/builder-util/src/util.ts +++ b/packages/builder-util/src/util.ts @@ -1,5 +1,5 @@ import { appBuilderPath } from "app-builder-bin" -import { CancellationToken, safeStringifyJson } from "builder-util-runtime" +import { safeStringifyJson, retry as _retry } from "builder-util-runtime" import * as chalk from "chalk" import { ChildProcess, execFile, ExecFileOptions, SpawnOptions } from "child_process" import { spawn as _spawn } from "cross-spawn" @@ -408,16 +408,8 @@ export async function executeAppBuilder( } export async function retry(task: () => Promise, retryCount: number, interval: number, backoff = 0, attempt = 0, shouldRetry?: (e: any) => boolean): Promise { - const cancellationToken = new CancellationToken() - try { - return await task() - } catch (error: any) { + return await _retry(task, retryCount, interval, backoff, attempt, e => { log.info(`Above command failed, retrying ${retryCount} more times`) - if ((shouldRetry?.(error) ?? true) && retryCount > 0 && !cancellationToken.cancelled) { - await new Promise(resolve => setTimeout(resolve, interval + backoff * attempt)) - return await retry(task, retryCount - 1, interval, backoff, attempt + 1, shouldRetry) - } else { - throw error - } - } + return shouldRetry?.(e) ?? true + }) } diff --git a/packages/electron-updater/package.json b/packages/electron-updater/package.json index 11a700781e9..c732d4331a7 100644 --- a/packages/electron-updater/package.json +++ b/packages/electron-updater/package.json @@ -16,7 +16,6 @@ "out" ], "dependencies": { - "builder-util": "workspace:*", "builder-util-runtime": "workspace:*", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", diff --git a/packages/electron-updater/src/AppUpdater.ts b/packages/electron-updater/src/AppUpdater.ts index bbc5fea291d..152a105c05b 100644 --- a/packages/electron-updater/src/AppUpdater.ts +++ b/packages/electron-updater/src/AppUpdater.ts @@ -1,4 +1,3 @@ -import { retry } from "builder-util" import { AllPublishOptions, asArray, @@ -11,6 +10,7 @@ import { CancellationError, ProgressInfo, BlockMap, + retry, } from "builder-util-runtime" import { randomBytes } from "crypto" import { release } from "os" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c10c7b72e3..9aee581ed82 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -514,9 +514,6 @@ importers: packages/electron-updater: dependencies: - builder-util: - specifier: workspace:* - version: link:../builder-util builder-util-runtime: specifier: workspace:* version: link:../builder-util-runtime