From d94a50f8c34ce722cc0d270ab4d90a241bf48c1b Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Sat, 18 Apr 2026 19:41:42 +0200 Subject: [PATCH] Retry SPM dependency resolve to work around binary-target race xcodebuild's resolvePackageDependencies sometimes fails with "already exists in file system" when multiple binary xcframework targets from the same release URL try to extract concurrently. The failing target varies across runs, confirming a race, not a missing-file problem. Wipe the three SPM cache roots between attempts and retry up to three times before giving up; once the resolve succeeds, fastlane's own resolve step reuses the cache. --- .github/workflows/release.yml | 39 ++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 85ea7862..6be276b7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -46,11 +46,25 @@ jobs: run: | sudo xcodebuild -downloadPlatform iOS || true sudo xcodebuild -downloadPlatform tvOS || true - - name: Clear SPM cache + - name: Resolve SPM dependencies (retry around SPM binary-target race) run: | - rm -rf ~/Library/Caches/org.swift.swiftpm - rm -rf ~/Library/org.swift.swiftpm - rm -rf ~/Library/Developer/Xcode/DerivedData + case "${{ matrix.lane }}" in + "ios beta") SCHEME="Yattee (iOS)" ;; + "tvos beta") SCHEME="Yattee (tvOS)" ;; + *) SCHEME="Yattee (iOS)" ;; + esac + set +e + for attempt in 1 2 3; do + rm -rf ~/Library/Caches/org.swift.swiftpm ~/Library/org.swift.swiftpm ~/Library/Developer/Xcode/DerivedData + echo "::group::Resolve attempt $attempt for $SCHEME" + xcodebuild -resolvePackageDependencies -project Yattee.xcodeproj -scheme "$SCHEME" + RC=$? + echo "::endgroup::" + [ $RC -eq 0 ] && exit 0 + echo "Attempt $attempt failed (rc=$RC), retrying after 15s..." + sleep 15 + done + exit 1 - uses: maierj/fastlane-action@v3.0.0 with: lane: ${{ matrix.lane }} @@ -76,11 +90,20 @@ jobs: - uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '26.0.1' - - name: Clear SPM cache + - name: Resolve SPM dependencies (retry around SPM binary-target race) run: | - rm -rf ~/Library/Caches/org.swift.swiftpm - rm -rf ~/Library/org.swift.swiftpm - rm -rf ~/Library/Developer/Xcode/DerivedData + set +e + for attempt in 1 2 3; do + rm -rf ~/Library/Caches/org.swift.swiftpm ~/Library/org.swift.swiftpm ~/Library/Developer/Xcode/DerivedData + echo "::group::Resolve attempt $attempt for Yattee (macOS)" + xcodebuild -resolvePackageDependencies -project Yattee.xcodeproj -scheme "Yattee (macOS)" + RC=$? + echo "::endgroup::" + [ $RC -eq 0 ] && exit 0 + echo "Attempt $attempt failed (rc=$RC), retrying after 15s..." + sleep 15 + done + exit 1 - uses: maierj/fastlane-action@v3.0.0 with: lane: mac build_and_notarize