axmol/tools/travis-scripts/run-script.sh

338 lines
9.9 KiB
Bash
Raw Normal View History

2019-11-23 20:27:39 +08:00
#!/bin/bash
# exit this script if any commmand fails
set -e
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
2021-05-18 16:40:30 +08:00
ADXE_ROOT="$DIR"/../..
COCOSFILE_PATH="$ADXE_ROOT/templates/cocos2dx_files.json"
2019-11-23 20:27:39 +08:00
CPU_CORES=4
function do_retry()
{
cmd=$@
retry_times=5
retry_wait=3
c=0
while [ $c -lt $((retry_times+1)) ]; do
c=$((c+1))
echo "Executing \"$cmd\", try $c"
$cmd && return $?
if [ ! $c -eq $retry_times ]; then
echo "Command failed, will retry in $retry_wait secs"
sleep $retry_wait
else
echo "Command failed, giving up."
return 1
fi
done
}
function build_linux()
{
echo "Building tests ..."
2021-05-15 01:00:20 +08:00
# source ../environment.sh
2021-05-18 16:40:30 +08:00
cd $ADXE_ROOT
2019-11-29 10:02:03 +08:00
set -x
2020-08-24 16:26:12 +08:00
cmake . -G "Unix Makefiles" -Bbuild -DCMAKE_BUILD_TYPE=Release
cmake --build build --target cpp-tests -- -j `nproc`
2019-11-29 10:02:03 +08:00
set +x
2019-11-23 20:27:39 +08:00
}
function build_osx()
2019-11-23 20:27:39 +08:00
{
NUM_OF_CORES=`getconf _NPROCESSORS_ONLN`
2021-05-18 16:40:30 +08:00
# pushd $ADXE_ROOT
# python -u tools/console/bin/adxe.py --agreement n new -l cpp -p my.pack.qqqq cocos_new_test
2019-11-23 20:27:39 +08:00
# popd
2021-05-18 16:40:30 +08:00
# cd $ADXE_ROOT/cocos_new_test
cd $ADXE_ROOT
2020-08-24 16:26:12 +08:00
mkdir -p build
2020-10-06 16:50:06 +08:00
cmake -S . -B build -GXcode -DBUILD_EXTENSION_IMGUIEXT=ON -DBUILD_EXT_ALSOFT=ON
cmake --build build --config Release --target cpp-tests -- -quiet
2021-05-18 16:40:30 +08:00
#xcodebuild -project adxe.xcodeproj -alltargets -jobs $NUM_OF_CORES build | xcpretty
2019-11-29 10:02:03 +08:00
##the following commands must not be removed
2021-05-18 16:40:30 +08:00
#xcodebuild -project adxe.xcodeproj -alltargets -jobs $NUM_OF_CORES build
2019-11-23 20:27:39 +08:00
exit 0
}
function build_ios()
2019-11-23 20:27:39 +08:00
{
NUM_OF_CORES=`getconf _NPROCESSORS_ONLN`
2021-05-18 16:40:30 +08:00
# pushd $ADXE_ROOT
# python -u tools/console/bin/adxe.py --agreement n new -l cpp -p my.pack.qqqq cocos_new_test
2019-11-23 20:27:39 +08:00
# popd
2021-05-18 16:40:30 +08:00
# cd $ADXE_ROOT/cocos_new_test
cd $ADXE_ROOT
2020-08-24 16:26:12 +08:00
# mkdir -p build
2020-11-11 15:21:29 +08:00
cmake -S . -B build -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/ios.mini.cmake -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 -DBUILD_EXT_ALSOFT=ON
# cmake .. -GXcode -DCMAKE_TOOLCHAIN_FILE=../cmake/ios.toolchain.cmake -DCMAKE_SYSTEM_NAME=iOS -DPLATFORM=OS -DENABLE_ARC=0 # too much logs on console when "cmake --build ."
2020-08-24 16:26:12 +08:00
cmake --build build --config Release --target cpp-tests -- -quiet -jobs $NUM_OF_CORES -destination "platform=iOS Simulator,name=iPhone Retina (4-inch)"
2019-11-29 10:02:03 +08:00
2021-05-18 16:40:30 +08:00
#xcodebuild -project adxe.xcodeproj -alltargets -jobs $NUM_OF_CORES -destination "platform=iOS Simulator,name=iPhone Retina (4-inch)" build | xcpretty
2019-11-29 10:02:03 +08:00
##the following commands must not be removed
2021-05-18 16:40:30 +08:00
#xcodebuild -project adxe.xcodeproj -alltargets -jobs $NUM_OF_CORES -destination "platform=iOS Simulator,name=iPhone Retina (4-inch)" build
2019-11-23 20:27:39 +08:00
exit 0
}
function build_android()
2019-11-23 20:27:39 +08:00
{
# Build all samples
echo "Building Android samples ..."
source ../environment.sh
# build cpp-tests
2021-05-18 16:40:30 +08:00
pushd $ADXE_ROOT/tests/cpp-tests/proj.android
2020-11-09 17:53:23 +08:00
do_retry ./gradlew assembleRelease -PPROP_BUILD_TYPE=cmake -PPROP_APP_ABI=arm64-v8a --parallel --info
2019-11-23 20:27:39 +08:00
popd
}
function build_android_lua()
2019-11-23 20:27:39 +08:00
{
# Build all samples
echo "Building Android samples lua ..."
source ../environment.sh
# build lua-tests
2021-05-18 16:40:30 +08:00
pushd $ADXE_ROOT/tests/lua-tests/project/proj.android
do_retry ./gradlew assembleDebug -PPROP_BUILD_TYPE=cmake -PPROP_APP_ABI=arm64-v8a --parallel --info
2019-11-23 20:27:39 +08:00
popd
}
function genernate_binding_codes()
{
if [ $TRAVIS_OS_NAME == "linux" ]; then
# print some log for libstdc++6
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC
ls -l /usr/lib/x86_64-linux-gnu/libstdc++*
dpkg-query -W libstdc++6
2021-05-18 16:40:30 +08:00
ldd $ADXE_ROOT/tools/bindings-generator/libclang/libclang.so
2019-11-23 20:27:39 +08:00
fi
source ../environment.sh
# Generate binding glue codes
echo "Create auto-generated luabinding glue codes."
2021-05-18 16:40:30 +08:00
pushd "$ADXE_ROOT/tools/tolua"
2019-11-25 20:32:43 +08:00
# python ./genbindings.py
2019-11-23 20:27:39 +08:00
popd
}
# generate cocos_files.json and check diff
function update_cocos_files()
{
# Don't exit on non-zero return value
set +e
echo "Updates cocos_files.json"
2021-05-18 16:40:30 +08:00
$ADXE_ROOT/tools/travis-scripts/generate-template-files.py
2019-11-23 20:27:39 +08:00
git diff FETCH_HEAD --stat --exit-code "$COCOSFILE_PATH"
COCOSFILE_DIFF_RETVAL=$?
echo $COCOSFILE_DIFF_RETVAL
# Exit on error
set -e
}
function generate_pull_request_for_binding_codes_and_cocosfiles()
{
2021-05-18 16:40:30 +08:00
local COCOS_ROBOT_REMOTE="https://${GH_USER}:${GH_PASSWORD}@github.com/${GH_USER}/adxe.git"
local LUA_AUTO_GENERATE_SCRIPT_PATH="$ADXE_ROOT/extensions/scripting/lua-bindings/auto"
2019-11-23 20:27:39 +08:00
local ELAPSEDSECS=`date +%s`
local COCOS_BRANCH="update_lua_bindings_$ELAPSEDSECS"
local COMMITTAG="[ci skip][AUTO]: updating luabinding & cocos_file.json automatically"
local PULL_REQUEST_REPO="https://api.github.com/repos/cocos2d/cocos2d-x/pulls"
2021-05-18 16:40:30 +08:00
pushd "$ADXE_ROOT"
2019-11-23 20:27:39 +08:00
#Set git user for cocos2d-lua repo
# git config user.email ${GH_EMAIL}
# git config user.name ${GH_USER}#Set remotes
# git remote add upstream "$COCOS_ROBOT_REMOTE" 2> /dev/null > /dev/null
2019-11-23 20:27:39 +08:00
# Run status to record the output in the log
git status
echo
echo Comparing with origin HEAD ...
echo
git fetch origin "$TRAVIS_BRANCH"
# Don't exit on non-zero return value
set +e
git diff FETCH_HEAD --stat --exit-code "$LUA_AUTO_GENERATE_SCRIPT_PATH"
local lua_binding_codes_diff=$?
# generate cocos_files.json and check diff
local cocos_file_diff=$(update_cocos_files)
if [ $lua_binding_codes_diff -eq 0 ] && [ $cocos_file_diff -eq 0 ]; then
echo "lua binding codes and cocos file are not differences"
exit 0
fi
# Exit on error
set -e
# git add -f --all "$LUA_AUTO_GENERATE_SCRIPT_PATH"
# git add -f --all "$COCOSFILE_PATH"
# git checkout -b "$COCOS_BRANCH"
# git commit -m "$COMMITTAG"
2019-11-23 20:27:39 +08:00
echo "Pushing to Robot's repo ..."
# git fetch --unshallow origin
# git push -f upstream "$COCOS_BRANCH"
2019-11-23 20:27:39 +08:00
echo "Sending Pull Request to base repo ..."
# curl --user "${GH_USER}:${GH_PASSWORD}" --request POST --data "{ \"title\": \"$COMMITTAG\", \"body\": \"\", \"head\": \"${GH_USER}:${COCOS_BRANCH}\", \"base\": \"${TRAVIS_BRANCH}\"}" "${PULL_REQUEST_REPO}" 2> /dev/null > /dev/null
2019-11-23 20:27:39 +08:00
popd
}
function run_pull_request()
{
echo "Building pull request ..."
if [ "$BUILD_TARGET" == "android_cocos_new_test" ]; then
source ../environment.sh
2021-05-18 16:40:30 +08:00
pushd $ADXE_ROOT
2019-11-23 20:27:39 +08:00
update_cocos_files
2021-05-18 16:40:30 +08:00
python -u tools/console/bin/adxe.py --agreement n new -l cpp -p my.pack.qqqq cocos_new_test
2019-11-23 20:27:39 +08:00
popd
2021-05-18 16:40:30 +08:00
pushd $ADXE_ROOT/cocos_new_test/proj.android
2019-11-23 20:27:39 +08:00
do_retry ./gradlew build
popd
exit 0
fi
if [ "$BUILD_TARGET" == "linux_cocos_new_test" ]; then
2021-05-18 16:40:30 +08:00
export PATH=$PATH:$ADXE_ROOT/tools/console/bin
2019-11-23 20:27:39 +08:00
genernate_binding_codes
2021-05-18 16:40:30 +08:00
pushd $ADXE_ROOT
2019-11-23 20:27:39 +08:00
update_cocos_files
2021-05-18 16:40:30 +08:00
python -u tools/console/bin/adxe.py --agreement n new -l lua -p my.pack.qqqq cocos_new_test
2019-11-23 20:27:39 +08:00
popd
echo "Building tests ..."
2019-11-29 10:02:03 +08:00
set -x
2021-05-18 16:40:30 +08:00
cd $ADXE_ROOT/cocos_new_test
2019-11-23 20:27:39 +08:00
mkdir -p linux-build
cd linux-build
2019-11-29 10:02:03 +08:00
cmake .. -G"Unix Makefiles"
cmake --build . -- -j `nproc`
exit 0
fi
if [ "$BUILD_TARGET" == "ios_cocos_new_lua_test" ]; then
2021-05-18 16:40:30 +08:00
export PATH=$PATH:$ADXE_ROOT/tools/console/bin
2019-11-29 10:02:03 +08:00
#NUM_OF_CORES=`getconf _NPROCESSORS_ONLN`
genernate_binding_codes
2021-05-18 16:40:30 +08:00
pushd $ADXE_ROOT
2019-11-29 10:02:03 +08:00
echo "Creating tests ..."
set -x
cocos --agreement n new -l lua ios_new_lua_proj
cd ios_new_lua_proj
mkdir build
cd build
cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator
cmake --build . --config Release -- -quiet
popd
exit 0
fi
if [ "$BUILD_TARGET" == "ios_cocos_new_cpp_test" ]; then
2021-05-18 16:40:30 +08:00
export PATH=$PATH:$ADXE_ROOT/tools/console/bin
2019-11-29 10:02:03 +08:00
#NUM_OF_CORES=`getconf _NPROCESSORS_ONLN`
genernate_binding_codes
2021-05-18 16:40:30 +08:00
pushd $ADXE_ROOT
2019-11-29 10:02:03 +08:00
echo "Creating tests ..."
set -x
cocos --agreement n new -l cpp ios_new_cpp_proj
cd ios_new_cpp_proj
mkdir build
cd build
echo "Building tests ..."
cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator
cmake --build . --config Release -- -quiet
popd
2019-11-23 20:27:39 +08:00
exit 0
fi
if [ $BUILD_TARGET == 'osx' ]; then
# genernate_binding_codes
2019-11-29 10:02:03 +08:00
set -x
build_osx
2019-11-23 20:27:39 +08:00
exit 0
fi
if [ $BUILD_TARGET == 'ios' ]; then
# genernate_binding_codes
2019-11-29 10:02:03 +08:00
set -x
build_ios
2019-11-23 20:27:39 +08:00
exit 0
fi
# linux
if [ $BUILD_TARGET == 'linux' ]; then
# genernate_binding_codes
2019-11-23 20:27:39 +08:00
build_linux
fi
# android
if [ $BUILD_TARGET == 'android' ]; then
build_android
2019-11-23 20:27:39 +08:00
fi
# android_lua
if [ $BUILD_TARGET == 'android_lua' ]; then
2019-11-23 20:27:39 +08:00
genernate_binding_codes
build_android_lua
2019-11-23 20:27:39 +08:00
fi
}
function run_after_merge()
{
echo "Building merge commit ..."
# Re-generation of the javascript bindings can perform push of the new
# version back to github. We don't do this for pull requests, or if
# GH_USER/GH_EMAIL/GH_PASSWORD environment variables are not set correctly
# by the encoded variables in the .travis.yml file. (e.g. if cloned repo's
# want to use travis).
# if [ -z "${GH_EMAIL}" ]; then
# echo "GH_EMAIL not set"
# exit 1
# fi
# if [ -z "${GH_USER}" ]; then
# echo "GH_USER not set"
# exit 1
# fi
# if [ -z "${GH_PASSWORD}" ]; then
# echo "GH_USER not set"
# exit 1
# fi
2019-11-23 20:27:39 +08:00
genernate_binding_codes
generate_pull_request_for_binding_codes_and_cocosfiles
}
# build pull request
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
run_pull_request
fi
# run after merging
# - make cocos robot to send PR to cocos2d-x for new binding codes
# - generate cocos_files.json for template
if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
# only one job need to send PR, linux virtual machine has better performance
if [ $TRAVIS_OS_NAME == "linux" ] && [ x$GEN_BINDING_AND_COCOSFILE == x"true" ]; then
run_after_merge
fi
fi