#!/usr/bin/env zsh
LOG_DIR="$HOME/Library/Logs/Signal-CI"
rm -rf "$LOG_DIR"
mkdir -p "$LOG_DIR"
SCHEMA_DIR="$HOME/Library/Signal-iOS-Schema"
rm -rf "$SCHEMA_DIR"
mkdir -p "$SCHEMA_DIR"
echo
echo "Available iOS Simulator runtimes:"
xcrun simctl list runtimes
echo
echo "Available iOS Simulators:"
xcrun simctl list devices
LATEST_IOS_RUNTIME=$(
xcrun simctl list runtimes -j \
| jq -r '.runtimes | map(select(.name | startswith("iOS"))) | sort_by(.version) | last | .identifier'
)
echo
echo "Using latest iOS runtime: $LATEST_IOS_RUNTIME"
LATEST_IOS_SIM_ID=$(
xcrun simctl list devices -j \
| jq -r --arg runtime "$LATEST_IOS_RUNTIME" '.devices[$runtime] | first | .udid'
)
echo
echo "Using simulator: $LATEST_IOS_SIM_ID"
echo
set -o pipefail \
&& NSUnbufferedIO=YES TEST_RUNNER_SCHEMA_DUMP_PATH="$SCHEMA_DIR/schema.json" xcodebuild \
-workspace Signal.xcworkspace \
-scheme Signal \
-destination "platform=iOS Simulator,id=$LATEST_IOS_SIM_ID" \
-disableAutomaticPackageResolution \
-test-timeouts-enabled YES \
-maximum-test-execution-time-allowance 300 \
-default-test-execution-time-allowance 60 \
-resultBundlePath "$LOG_DIR/TestResult.xcresult" \
build test \
2>&1 \
| tee "$LOG_DIR/Signal-CI.log" \
| xcbeautify \
--renderer github-actions \
--disable-logging \
| while IFS= read -r line; do
printf '[%s] %s\n' "$(date +%H:%M:%S)" "$line"
done
XCODEBUILD_RESULT_CODE=$?
xcrun \
xcresulttool \
get \
test-results \
summary \
--path "$LOG_DIR/TestResult.xcresult" \
> "$LOG_DIR/TestResultSummary.json"
Scripts/parse-xcresult.py "$LOG_DIR/TestResultSummary.json"
exit $XCODEBUILD_RESULT_CODE