Skip to content

Commit 4dce371

Browse files
authored
fix(mac): Wrap hditutil detach in retry w/ backoff (#7600)
1 parent 6ae2074 commit 4dce371

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

.changeset/large-items-argue.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"builder-util": patch
3+
"dmg-builder": patch
4+
---
5+
6+
fix(mac): wrap hdiutil detach in retry w/ backoff

packages/builder-util/src/util.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -396,14 +396,14 @@ export function executeAppBuilder(
396396
}
397397
}
398398

399-
export async function retry<T>(task: () => Promise<T>, retriesLeft: number, interval: number): Promise<T> {
399+
export async function retry<T>(task: () => Promise<T>, retriesLeft: number, interval: number, backoff = 0, attempt = 0): Promise<T> {
400400
try {
401401
return await task()
402402
} catch (error: any) {
403403
log.info(`Above command failed, retrying ${retriesLeft} more times`)
404404
if (retriesLeft > 0) {
405-
await new Promise(resolve => setTimeout(resolve, interval))
406-
return await retry(task, retriesLeft - 1, interval)
405+
await new Promise(resolve => setTimeout(resolve, interval + backoff * attempt))
406+
return await retry(task, retriesLeft - 1, interval, backoff, attempt + 1)
407407
} else {
408408
throw error
409409
}

packages/dmg-builder/src/dmgUtil.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { exec } from "builder-util"
1+
import { exec, retry } from "builder-util"
22
import { PlatformPackager } from "app-builder-lib"
33
import { executeFinally } from "builder-util/out/promise"
44
import * as path from "path"
@@ -37,11 +37,7 @@ export async function detach(name: string) {
3737
try {
3838
await exec("hdiutil", ["detach", "-quiet", name])
3939
} catch (e: any) {
40-
await new Promise((resolve, reject) => {
41-
setTimeout(() => {
42-
exec("hdiutil", ["detach", "-force", name]).then(resolve).catch(reject)
43-
}, 1000)
44-
})
40+
await retry(() => exec("hdiutil", ["detach", "-force", name]), 5, 1000, 500)
4541
}
4642
}
4743

0 commit comments

Comments
 (0)