diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf3a2b21..edefd303 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,10 +52,46 @@ jobs: - name: Run UI tests run: | - xcodebuild \ - -project GhosttyTabs.xcodeproj \ - -scheme cmux \ - -configuration Debug \ - -destination 'platform=macOS' \ - -only-testing:GhosttyTabsUITests/UpdatePillUITests \ - test + set -euo pipefail + log_file="$(mktemp /tmp/cmux-ui-tests.XXXXXX.log)" + console_user="$(stat -f%Su /dev/console)" + console_uid="" + if [ "$console_user" != "root" ]; then + console_uid="$(id -u "$console_user")" + fi + + run_xcodebuild() { + if [ -n "$console_uid" ] && command -v sudo >/dev/null 2>&1; then + sudo /bin/launchctl asuser "$console_uid" sudo -u "$console_user" \ + xcodebuild \ + -project GhosttyTabs.xcodeproj \ + -scheme cmux \ + -configuration Debug \ + -destination 'platform=macOS' \ + -only-testing:GhosttyTabsUITests/UpdatePillUITests \ + test + else + xcodebuild \ + -project GhosttyTabs.xcodeproj \ + -scheme cmux \ + -configuration Debug \ + -destination 'platform=macOS' \ + -only-testing:GhosttyTabsUITests/UpdatePillUITests \ + test + fi + } + + set +e + run_xcodebuild 2>&1 | tee "$log_file" + status=${PIPESTATUS[0]} + set -e + + if [ "$status" -ne 0 ] && grep -q "Timed out while enabling automation mode" "$log_file"; then + echo "UI automation timed out. Retrying once after a short delay..." + sleep 5 + run_xcodebuild + status=$? + fi + + rm -f "$log_file" + exit "$status" diff --git a/GhosttyTabs.xcodeproj/project.pbxproj b/GhosttyTabs.xcodeproj/project.pbxproj index 02ee4bb0..2c94b198 100644 --- a/GhosttyTabs.xcodeproj/project.pbxproj +++ b/GhosttyTabs.xcodeproj/project.pbxproj @@ -410,7 +410,7 @@ CODE_SIGN_ENTITLEMENTS = ""; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; GENERATE_INFOPLIST_FILE = YES; @@ -426,7 +426,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.3.0; OTHER_LDFLAGS = ( "-lc++", "-framework", @@ -455,7 +455,7 @@ CODE_SIGN_ENTITLEMENTS = ""; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; GENERATE_INFOPLIST_FILE = YES; @@ -471,7 +471,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.3.0; OTHER_LDFLAGS = ( "-lc++", "-framework", @@ -498,10 +498,10 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 8; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.3.0; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.cmuxterm.appuitests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -515,10 +515,10 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 8; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.3.0; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.cmuxterm.appuitests; PRODUCT_NAME = "$(TARGET_NAME)";