@@ -278,11 +278,16 @@ jobs:
278278 run : |
279279 set -euo pipefail
280280
281- max_attempts=2
281+ max_attempts=3
282282 attempt=1
283283 # Only retry on known transient DMG detach failures.
284284 retry_pattern='hdiutil: detach:.*(timeout|not detached)|DiskArbitration expired'
285+ cleanup_script="scripts/ci/cleanup-dmg.sh"
285286 log_file=""
287+ if [ ! -f "${cleanup_script}" ]; then
288+ echo "Missing DMG cleanup script: ${cleanup_script}" >&2
289+ exit 1
290+ fi
286291
287292 cleanup_log_file() {
288293 if [ -n "${log_file:-}" ]; then
@@ -292,7 +297,14 @@ jobs:
292297 }
293298 trap cleanup_log_file EXIT
294299
300+ cleanup_stale_dmg_state() {
301+ bash "${cleanup_script}"
302+ }
303+
295304 while [ "${attempt}" -le "${max_attempts}" ]; do
305+ echo "Cleaning stale DMG state before attempt ${attempt}/${max_attempts}..."
306+ cleanup_stale_dmg_state
307+
296308 log_file="$(mktemp -t tauri-macos-build.XXXXXX.log)"
297309 echo "macOS build attempt ${attempt}/${max_attempts} (arch=${{ matrix.arch }}, target=${{ matrix.target }})"
298310
@@ -311,28 +323,7 @@ jobs:
311323 fi
312324
313325 echo "Detected transient DMG detach/bundling error. Cleaning up stale dmg mounts before retry..."
314- dmg_mounts="$(mount | awk '$3 ~ /^\/Volumes\/dmg\./ { print $3 }' || true)"
315- if [ -n "${dmg_mounts}" ]; then
316- while IFS= read -r mount_point; do
317- [ -z "${mount_point}" ] && continue
318- echo "Detaching ${mount_point}"
319- hdiutil detach "${mount_point}" || hdiutil detach -force "${mount_point}" || true
320- done <<< "${dmg_mounts}"
321-
322- # Avoid broad pkill: only target likely disk image helper binaries.
323- helper_pids="$(
324- pgrep -f '/System/Library/PrivateFrameworks/.*/diskimages-helper' || true
325- pgrep -f '/usr/libexec/diskimages-helper' || true
326- pgrep -f 'diskimages-help' || true
327- )"
328- helper_pids="$(printf '%s\n' "${helper_pids}" | awk 'NF' | sort -u)"
329- if [ -n "${helper_pids}" ]; then
330- while IFS= read -r pid; do
331- [ -z "${pid}" ] && continue
332- kill "${pid}" || true
333- done <<< "${helper_pids}"
334- fi
335- fi
326+ cleanup_stale_dmg_state
336327 rm -f src-tauri/target/${{ matrix.target }}/release/bundle/macos/rw.*.dmg || true
337328 cleanup_log_file
338329
0 commit comments