From 79266ee03b5569dcddf2dc0cd9701e815043fade Mon Sep 17 00:00:00 2001 From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com> Date: Tue, 24 Feb 2026 23:15:11 -0800 Subject: [PATCH] Fix UI test hang: remove ad-hoc signature before test launch The Mac Mini runner has no dev certificates, so xcodebuild produces an ad-hoc signed app. Gatekeeper rejects it, causing XCUITest to hang forever at app.launch(). Split build and test phases, strip the ad-hoc signature between them so the app can launch. --- .github/workflows/ci.yml | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a3654ce1..edf9b6f9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,8 +90,25 @@ jobs: # Remove stale build cache to avoid incremental build errors rm -rf ~/Library/Developer/Xcode/DerivedData/GhosttyTabs-* + - name: Build for testing + run: | + set -euo pipefail + xcodebuild -project GhosttyTabs.xcodeproj -scheme cmux -configuration Debug -destination "platform=macOS" build-for-testing + + - name: Allow ad-hoc signed app to launch + run: | + # The runner has no development certificates, so the app is ad-hoc signed. + # Gatekeeper blocks ad-hoc apps, causing XCUITest to hang on launch. + # Remove the signature so macOS treats it as unsigned (launchable) instead. + APP_PATH="$(find ~/Library/Developer/Xcode/DerivedData/GhosttyTabs-*/Build/Products/Debug -name 'cmux DEV.app' -print -quit)" + if [ -z "$APP_PATH" ]; then + echo "Built app not found in DerivedData" >&2 + exit 1 + fi + codesign --remove-signature "$APP_PATH" + echo "Removed ad-hoc signature from: $APP_PATH" + - name: Run UI tests run: | set -euo pipefail - # Run directly on the self-hosted macOS runner. - xcodebuild -project GhosttyTabs.xcodeproj -scheme cmux -configuration Debug -destination "platform=macOS" -only-testing:cmuxUITests/UpdatePillUITests test + xcodebuild -project GhosttyTabs.xcodeproj -scheme cmux -configuration Debug -destination "platform=macOS" -only-testing:cmuxUITests/UpdatePillUITests test-without-building