2018-09-04 23:45:40 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
GREEN="\033[0;32m"
|
|
|
|
CLEAR="\033[0m"
|
|
|
|
|
|
|
|
if which xcodebuild > /dev/null; then
|
|
|
|
echo -e "Gathering ${GREEN}xcodebuild sdk versions${CLEAR}..."
|
|
|
|
BUILD_DIR=`pwd`/build
|
|
|
|
LATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'`
|
2020-09-07 02:52:11 +00:00
|
|
|
LATEST_IOS_VERSION=`xcrun simctl list | grep ^iOS | ruby -e 'puts /\(([0-9.]+).*\)/.match(STDIN.read.chomp.split("\n").last).to_a[1]'`
|
2018-09-04 23:45:40 +00:00
|
|
|
LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'`
|
2020-09-07 02:52:11 +00:00
|
|
|
LATEST_TVOS_VERSION=`xcrun simctl list | grep ^tvOS | ruby -e 'puts /\(([0-9.]+).*\)/.match(STDIN.read.chomp.split("\n").last).to_a[1]'`
|
|
|
|
LATEST_MACOS_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 2 | ruby -e 'puts STDIN.read.chomp.split("\n").last'`
|
2018-09-04 23:45:40 +00:00
|
|
|
BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION}
|
2020-09-07 02:52:11 +00:00
|
|
|
RUNTIME_IOS_VERSION=${NIMBLE_RUNTIME_IOS_VERSION:-$LATEST_IOS_VERSION}
|
2018-09-04 23:45:40 +00:00
|
|
|
BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION}
|
2020-09-07 02:52:11 +00:00
|
|
|
RUNTIME_TVOS_VERSION=${NIMBLE_RUNTIME_TVOS_VERSION:-$LATEST_TVOS_VERSION}
|
2018-09-04 23:45:40 +00:00
|
|
|
BUILD_MACOS_SDK_VERSION=${NIMBLE_BUILD_MACOS_SDK_VERSION:-$LATEST_MACOS_SDK_VERSION}
|
|
|
|
fi
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
function color_if_overridden {
|
|
|
|
local actual=$1
|
|
|
|
local env_var=$2
|
|
|
|
if [ -z "$env_var" ]; then
|
|
|
|
printf "$actual"
|
|
|
|
else
|
|
|
|
printf "$GREEN$actual$CLEAR"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function print_env {
|
|
|
|
echo "=== Environment ==="
|
|
|
|
echo " iOS:"
|
|
|
|
echo " Latest iOS SDK: $LATEST_IOS_SDK_VERSION"
|
|
|
|
echo " Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`"
|
2020-09-07 02:52:11 +00:00
|
|
|
echo " Running with iOS: `color_if_overridden $RUNTIME_IOS_VERSION $NIMBLE_RUNTIME_IOS_VERSION`"
|
2018-09-04 23:45:40 +00:00
|
|
|
echo
|
|
|
|
echo " tvOS:"
|
|
|
|
echo " Latest tvOS SDK: $LATEST_TVOS_SDK_VERSION"
|
|
|
|
echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`"
|
2020-09-07 02:52:11 +00:00
|
|
|
echo " Running with tvOS: `color_if_overridden $RUNTIME_TVOS_VERSION $NIMBLE_RUNTIME_TVOS_VERSION`"
|
2018-09-04 23:45:40 +00:00
|
|
|
echo
|
|
|
|
echo " macOS:"
|
|
|
|
echo " Latest macOS SDK: $LATEST_MACOS_SDK_VERSION"
|
|
|
|
echo " Building with macOS SDK: `color_if_overridden $BUILD_MACOS_SDK_VERSION $NIMBLE_BUILD_MACOS_SDK_VERSION`"
|
|
|
|
echo
|
|
|
|
echo "======= END ======="
|
|
|
|
echo
|
|
|
|
}
|
|
|
|
|
|
|
|
function run {
|
|
|
|
echo -e "$GREEN==>$CLEAR $@"
|
|
|
|
"$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
function test_ios {
|
2019-12-14 00:36:15 +00:00
|
|
|
run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -destination "generic/platform=iOS" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build | xcpretty
|
|
|
|
|
2018-09-04 23:45:40 +00:00
|
|
|
run osascript -e 'tell app "Simulator" to quit'
|
2020-09-07 02:52:11 +00:00
|
|
|
run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPad Pro (9.7-inch),OS=$RUNTIME_IOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty
|
2018-09-04 23:45:40 +00:00
|
|
|
|
|
|
|
run osascript -e 'tell app "Simulator" to quit'
|
2020-09-07 02:52:11 +00:00
|
|
|
run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 8,OS=$RUNTIME_IOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty
|
2018-09-04 23:45:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function test_tvos {
|
2019-12-14 00:36:15 +00:00
|
|
|
run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -destination "generic/platform=tvOS" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build | xcpretty
|
|
|
|
|
2018-09-04 23:45:40 +00:00
|
|
|
run osascript -e 'tell app "Simulator" to quit'
|
2020-09-07 02:52:11 +00:00
|
|
|
run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV,OS=$RUNTIME_TVOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty
|
2018-09-04 23:45:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function test_macos {
|
2019-12-14 00:36:15 +00:00
|
|
|
run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-macOS" -configuration "Debug" -sdk "macosx$BUILD_MACOS_SDK_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty
|
2018-09-04 23:45:40 +00:00
|
|
|
}
|
|
|
|
|
2020-09-07 02:52:11 +00:00
|
|
|
function test_xcode_spm_macos {
|
|
|
|
mv Nimble.xcodeproj Nimble.xcodeproj.bak
|
|
|
|
trap 'mv Nimble.xcodeproj.bak Nimble.xcodeproj' EXIT
|
|
|
|
run set -o pipefail && xcodebuild -scheme "Nimble" -configuration "Debug" -sdk "macosx$BUILD_MACOS_SDK_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty
|
|
|
|
}
|
|
|
|
|
|
|
|
function test_xcode_spm_ios {
|
|
|
|
run osascript -e 'tell app "Simulator" to quit'
|
|
|
|
mv Nimble.xcodeproj Nimble.xcodeproj.bak
|
|
|
|
trap 'mv Nimble.xcodeproj.bak Nimble.xcodeproj' EXIT
|
|
|
|
run set -o pipefail && xcodebuild -scheme "Nimble" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 8,OS=$RUNTIME_IOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty
|
|
|
|
}
|
|
|
|
|
2018-09-04 23:45:40 +00:00
|
|
|
function test_podspec {
|
|
|
|
echo "Gathering CocoaPods installation information..."
|
|
|
|
run bundle exec pod --version
|
|
|
|
echo "Linting podspec..."
|
|
|
|
# Note: remove `--allow-warnings` once old Matcher API has been removed
|
2020-09-07 02:52:11 +00:00
|
|
|
run bundle exec pod lib lint Nimble.podspec --allow-warnings --skip-import-validation --verbose
|
2018-09-04 23:45:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function test_swiftpm {
|
|
|
|
if [ -d .build ]; then
|
2019-03-17 00:53:13 +00:00
|
|
|
run swift package clean
|
2018-09-04 23:45:40 +00:00
|
|
|
fi
|
2020-09-07 02:52:11 +00:00
|
|
|
run swift build -Xswiftc -suppress-warnings && swift test -Xswiftc -suppress-warnings --enable-test-discovery
|
2018-09-04 23:45:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function test_swiftpm_docker {
|
|
|
|
run docker build -t nimble-tests -f Dockerfile.test --no-cache .
|
|
|
|
run docker run -it --privileged=true nimble-tests
|
|
|
|
}
|
|
|
|
|
|
|
|
function test() {
|
|
|
|
test_ios
|
|
|
|
test_tvos
|
|
|
|
test_macos
|
|
|
|
|
2020-09-07 02:52:11 +00:00
|
|
|
if xcodebuild --help 2>&1 | grep xcframework > /dev/null; then
|
|
|
|
test_xcode_spm_ios
|
|
|
|
test_xcode_spm_macos
|
|
|
|
else
|
|
|
|
echo "Not testing with Swift Package Manager version of Xcode because it requires at least Xcode 11"
|
|
|
|
fi
|
|
|
|
|
2018-09-04 23:45:40 +00:00
|
|
|
if which swift-test; then
|
|
|
|
test_swiftpm
|
|
|
|
else
|
|
|
|
echo "Not testing with the Swift Package Manager because swift-test is not installed"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if which docker; then
|
|
|
|
test_swiftpm_docker
|
|
|
|
else
|
|
|
|
echo "Not testing linux in docker container since docker is not in PATH!"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function clean {
|
|
|
|
run rm -rf ~/Library/Developer/Xcode/DerivedData\; true
|
|
|
|
}
|
|
|
|
|
|
|
|
function help {
|
|
|
|
echo "Usage: $0 COMMANDS"
|
|
|
|
echo
|
|
|
|
echo "COMMANDS:"
|
|
|
|
echo " all - Runs the all tests of macos, ios and tvos"
|
|
|
|
echo " clean - Cleans the derived data directory of Xcode. Assumes default location"
|
|
|
|
echo " help - Displays this help"
|
|
|
|
echo " macos - Runs the tests on macOS 10.10 (Yosemite and newer only)"
|
2020-09-07 02:52:11 +00:00
|
|
|
echo " macos_xcodespm - Runs the tests on macOS using the Swift Package Manager version of Xcode"
|
|
|
|
echo " ios - Runs the tests as an iOS device"
|
|
|
|
echo " ios_xcodespm - Runs the tests as an iOS device using the Swift Package Manager version of Xcode"
|
|
|
|
echo " tvos - Runs the tests as an tvOS device"
|
2018-09-04 23:45:40 +00:00
|
|
|
echo " podspec - Runs pod lib lint against the podspec to detect breaking changes"
|
|
|
|
echo " swiftpm - Runs the tests built by the Swift Package Manager"
|
|
|
|
echo " swiftpm_docker - Runs the tests built by the Swift Package Manager in a docker linux container"
|
|
|
|
echo
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
function main {
|
|
|
|
print_env
|
|
|
|
for arg in $@
|
|
|
|
do
|
|
|
|
case "$arg" in
|
|
|
|
clean) clean ;;
|
|
|
|
ios) test_ios ;;
|
2020-09-07 02:52:11 +00:00
|
|
|
ios_xcodespm) test_xcode_spm_ios ;;
|
2018-09-04 23:45:40 +00:00
|
|
|
tvos) test_tvos ;;
|
|
|
|
macos) test_macos ;;
|
2020-09-07 02:52:11 +00:00
|
|
|
macos_xcodespm) test_xcode_spm_macos ;;
|
2018-09-04 23:45:40 +00:00
|
|
|
podspec) test_podspec ;;
|
|
|
|
test) test ;;
|
|
|
|
all) test ;;
|
|
|
|
swiftpm) test_swiftpm ;;
|
|
|
|
swiftpm_docker) test_swiftpm_docker ;;
|
|
|
|
help) help ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ $# -eq 0 ]; then
|
|
|
|
clean
|
|
|
|
test
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
main $@
|