Files
Texture/build.sh
Huy Nguyen 33c4b05907 Set up GitHub Actions CI (#1623)
GitHub Actions now supports CI and it's free for open source projects!

Our current CI runs on a single machine and needs 1h 20m for each build. GitHub CI often finishes everything in less than 10m!

The setup is straight-forward. The only missing feature is the ability to exclude certain files so that if a commit only contains those files, the CI won't test it at all (see exclude-from-build.json). Given that GitHub CI is fast and is not a serial queue, I wouldn't mind testing such commit as well.

* Fix and optimize steps that build example projects

- examples-pt3 builds the same examples as examples-pt1 instead of building the remaining projects. So I fixed it.
- Add another mode (examples-pt4) to distribute the load with existing steps.
- Build extra examples (examples-extra-pt{1, 2, 3}) which weren't built before.
- Each examples-pt and examples-extra-pt builds 5 projects except examples-pt4 and examples-extra-pt3 which build 6.

* Use HTTPS URL for Weaver in Podfile of examples/ASDKgram

* Don't build extra examples for now
2019-08-18 16:40:30 -07:00

253 lines
7.0 KiB
Bash
Executable File

#!/bin/bash
PLATFORM="${TEXTURE_BUILD_PLATFORM:-platform=iOS Simulator,OS=10.2,name=iPhone 7}"
SDK="${TEXTURE_BUILD_SDK:-iphonesimulator12.2}"
DERIVED_DATA_PATH="~/ASDKDerivedData"
# It is pitch black.
set -e
function trap_handler {
echo -e "\n\nOh no! You walked directly into the slavering fangs of a lurking grue!"
echo "**** You have died ****"
exit 255
}
trap trap_handler INT TERM EXIT
# Derived data handling
eval [ ! -d $DERIVED_DATA_PATH ] && eval mkdir $DERIVED_DATA_PATH
function clean_derived_data {
eval find $DERIVED_DATA_PATH -mindepth 1 -delete
}
# Build example
function build_example {
example="$1"
clean_derived_data
if [ -f "${example}/Podfile" ]; then
echo "Using CocoaPods"
if [ -f "${example}/Podfile.lock" ]; then
rm "$example/Podfile.lock"
fi
rm -rf "$example/Pods"
pod install --project-directory=$example
set -o pipefail && xcodebuild \
-workspace "${example}/Sample.xcworkspace" \
-scheme Sample \
-sdk "$SDK" \
-destination "$PLATFORM" \
-derivedDataPath "$DERIVED_DATA_PATH" \
build | xcpretty $FORMATTER
elif [ -f "${example}/Cartfile" ]; then
echo "Using Carthage"
local_repo=`pwd`
current_branch=`git rev-parse --abbrev-ref HEAD`
cd $example
echo "git \"file://${local_repo}\" \"${current_branch}\"" > "Cartfile"
carthage update --platform iOS
set -o pipefail && xcodebuild \
-project "Sample.xcodeproj" \
-scheme Sample \
-sdk "$SDK" \
-destination "$PLATFORM" \
build | xcpretty $FORMATTER
cd ../..
fi
}
MODE="$1"
if type xcpretty-travis-formatter &> /dev/null; then
FORMATTER="-f $(xcpretty-travis-formatter)"
else
FORMATTER="-s"
fi
if [ "$MODE" = "tests" -o "$MODE" = "all" ]; then
echo "Building & testing AsyncDisplayKit."
pod install
set -o pipefail && xcodebuild \
-workspace AsyncDisplayKit.xcworkspace \
-scheme AsyncDisplayKit \
-sdk "$SDK" \
-destination "$PLATFORM" \
build-for-testing test | xcpretty $FORMATTER
success="1"
fi
if [ "$MODE" = "tests_listkit" ]; then
echo "Building & testing AsyncDisplayKit+IGListKit."
pod install --project-directory=SubspecWorkspaces/ASDKListKit
set -o pipefail && xcodebuild \
-workspace SubspecWorkspaces/ASDKListKit/ASDKListKit.xcworkspace \
-scheme ASDKListKitTests \
-sdk "$SDK" \
-destination "$PLATFORM" \
build-for-testing test | xcpretty $FORMATTER
success="1"
fi
if [ "$MODE" = "examples" -o "$MODE" = "all" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in examples/*/; do
echo "Building (examples) $example."
build_example $example
done
success="1"
fi
if [ "$MODE" = "examples-pt1" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | head -6); do
echo "Building (examples-pt1) $example"
build_example $example
done
success="1"
fi
if [ "$MODE" = "examples-pt2" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | head -11 | tail -5); do
echo "Building (examples-pt2) $example"
build_example $example
done
success="1"
fi
if [ "$MODE" = "examples-pt3" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | head -16 | tail -5); do
echo "Building (examples-pt3) $example"
build_example $example
done
success="1"
fi
if [ "$MODE" = "examples-pt4" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in $((find ./examples -type d -maxdepth 1 \( ! -iname ".*" \)) | tail -n +17); do
echo "Building (examples-pt4) $example"
build_example $example
done
success="1"
fi
if [ "$MODE" = "examples-extra-pt1" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in $((find ./examples_extra -type d -maxdepth 1 \( ! -iname ".*" \)) | head -6); do
echo "Building (examples-extra-pt1) $example"
build_example $example
done
success="1"
fi
if [ "$MODE" = "examples-extra-pt2" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in $((find ./examples_extra -type d -maxdepth 1 \( ! -iname ".*" \)) | head -11 | tail -5); do
echo "Building (examples-extra-pt2) $example"
build_example $example
done
success="1"
fi
if [ "$MODE" = "examples-extra-pt3" ]; then
echo "Verifying that all AsyncDisplayKit examples compile."
#Update cocoapods repo
pod repo update master
for example in $((find ./examples_extra -type d -maxdepth 1 \( ! -iname ".*" \)) | tail -n +12); do
echo "Building (examples-extra-pt3) $example"
build_example $example
done
success="1"
fi
# Support building a specific example: sh build.sh example examples/ASDKLayoutTransition
if [ "$MODE" = "example" ]; then
echo "Verifying $2 compiles."
#Update cocoapods repo
pod repo update master
build_example $2
success="1"
fi
if [ "$MODE" = "life-without-cocoapods" -o "$MODE" = "all" ]; then
echo "Verifying that AsyncDisplayKit functions as a static library."
set -o pipefail && xcodebuild \
-workspace "smoke-tests/Life Without CocoaPods/Life Without CocoaPods.xcworkspace" \
-scheme "Life Without CocoaPods" \
-sdk "$SDK" \
-destination "$PLATFORM" \
build | xcpretty $FORMATTER
success="1"
fi
if [ "$MODE" = "framework" -o "$MODE" = "all" ]; then
echo "Verifying that AsyncDisplayKit functions as a dynamic framework (for Swift/Carthage users)."
set -o pipefail && xcodebuild \
-project "smoke-tests/Framework/Sample.xcodeproj" \
-scheme Sample \
-sdk "$SDK" \
-destination "$PLATFORM" \
build | xcpretty $FORMATTER
success="1"
fi
if [ "$MODE" = "cocoapods-lint" -o "$MODE" = "all" ]; then
echo "Verifying that podspec lints."
set -o pipefail && pod env && pod lib lint --allow-warnings
success="1"
fi
if [ "$MODE" = "carthage" -o "$MODE" = "all" ]; then
echo "Verifying carthage works."
set -o pipefail && carthage update && carthage build --no-skip-current
success="1"
fi
if [ "$success" = "1" ]; then
trap - EXIT
exit 0
fi
echo "Unrecognised mode '$MODE'."