2013-05-13 15:18:18 +08:00
|
|
|
#!/bin/bash
|
2016-09-01 16:25:47 +08:00
|
|
|
|
2013-05-13 15:18:18 +08:00
|
|
|
# exit this script if any commmand fails
|
|
|
|
set -e
|
|
|
|
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
COCOS2DX_ROOT="$DIR"/../..
|
2017-01-19 13:55:14 +08:00
|
|
|
CPU_CORES=4
|
2013-05-13 15:18:18 +08:00
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
function build_linux()
|
|
|
|
{
|
2017-01-19 13:55:14 +08:00
|
|
|
CPU_CORES=`grep -c ^processor /proc/cpuinfo`
|
2016-09-01 16:25:47 +08:00
|
|
|
echo "Building tests ..."
|
|
|
|
cd $COCOS2DX_ROOT/build
|
|
|
|
mkdir -p linux-build
|
|
|
|
cd linux-build
|
|
|
|
cmake ../..
|
2017-01-19 13:55:14 +08:00
|
|
|
echo "cpu cores: ${CPU_CORES}"
|
|
|
|
make -j${CPU_CORES}
|
2016-09-01 16:25:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function build_mac()
|
|
|
|
{
|
|
|
|
NUM_OF_CORES=`getconf _NPROCESSORS_ONLN`
|
|
|
|
|
2017-06-29 16:41:06 +08:00
|
|
|
xcodebuild -project $COCOS2DX_ROOT/build/cocos2d_tests.xcodeproj -scheme "build all tests Mac" -jobs $NUM_OF_CORES -arch x86_64 build | xcpretty
|
|
|
|
##xcpretty has a bug, some xcodebuid fails return value would be treated as 0.
|
|
|
|
xcodebuild -project $COCOS2DX_ROOT/build/cocos2d_tests.xcodeproj -scheme "build all tests Mac" -jobs $NUM_OF_CORES -arch x86_64 build
|
2016-09-01 16:25:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function build_ios()
|
|
|
|
{
|
|
|
|
NUM_OF_CORES=`getconf _NPROCESSORS_ONLN`
|
|
|
|
|
2017-06-29 16:41:06 +08:00
|
|
|
xcodebuild -project $COCOS2DX_ROOT/build/cocos2d_tests.xcodeproj -scheme "build all tests iOS" -jobs $NUM_OF_CORES -destination "platform=iOS Simulator,name=iPhone Retina (4-inch)" build | xcpretty
|
|
|
|
#the following commands must not be removed
|
|
|
|
xcodebuild -project $COCOS2DX_ROOT/build/cocos2d_tests.xcodeproj -scheme "build all tests iOS" -jobs $NUM_OF_CORES -destination "platform=iOS Simulator,name=iPhone Retina (4-inch)" build
|
2016-09-01 16:25:47 +08:00
|
|
|
}
|
2014-02-12 22:01:46 +08:00
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
function build_android()
|
|
|
|
{
|
|
|
|
# Build all samples
|
|
|
|
echo "Building Android samples ..."
|
|
|
|
export COCOS_CONSOLE_ROOT=$COCOS2DX_ROOT/tools/cocos2d-console/bin
|
|
|
|
export ANDROID_SDK_ROOT=/usr/local/android-sdk
|
|
|
|
export COCOS_X_ROOT=$COCOS2DX_ROOT
|
2017-12-04 18:00:45 +08:00
|
|
|
export PATH=$ANDROID_SDK_ROOT:$COCOS_CONSOLE_ROOT:$PATH
|
2016-09-01 16:25:47 +08:00
|
|
|
|
|
|
|
# build cpp-empty-test
|
2017-12-01 17:29:34 +08:00
|
|
|
# pushd $COCOS2DX_ROOT/tests/cpp-empty-test
|
|
|
|
# cocos compile -p android --android-studio
|
|
|
|
# popd
|
2016-09-01 16:25:47 +08:00
|
|
|
|
|
|
|
# build cpp-tests
|
|
|
|
pushd $COCOS2DX_ROOT/tests/cpp-tests
|
2017-12-04 18:00:45 +08:00
|
|
|
cocos compile -p android
|
2016-09-01 16:25:47 +08:00
|
|
|
popd
|
|
|
|
|
|
|
|
# build lua-tests
|
|
|
|
pushd $COCOS2DX_ROOT/tests/lua-tests
|
2017-12-04 18:00:45 +08:00
|
|
|
cocos compile -p android
|
2016-09-01 16:25:47 +08:00
|
|
|
popd
|
|
|
|
|
|
|
|
# build js-tests
|
2017-12-01 17:29:34 +08:00
|
|
|
# should uncomon it when building time not exceed time limit
|
|
|
|
# pushd $COCOS2DX_ROOT/tests/js-tests
|
2017-12-04 18:00:45 +08:00
|
|
|
# cocos compile -p android
|
2017-12-01 17:29:34 +08:00
|
|
|
# popd
|
2016-09-01 16:25:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function genernate_binding_codes()
|
|
|
|
{
|
2017-12-07 13:34:12 +08:00
|
|
|
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
|
|
|
|
ldd $COCOS2DX_ROOT/tools/bindings-generator/libclang/libclang.so
|
|
|
|
fi
|
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
# set environment variables needed by binding codes
|
|
|
|
|
2017-06-29 16:41:06 +08:00
|
|
|
which python
|
2016-09-01 16:25:47 +08:00
|
|
|
|
|
|
|
export NDK_ROOT=$HOME/bin/android-ndk
|
2017-11-03 13:44:13 +08:00
|
|
|
export PYTHON_BIN=/usr/bin/python
|
2014-02-11 14:12:13 +08:00
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
# Generate binding glue codes
|
|
|
|
|
|
|
|
echo "Create auto-generated luabinding glue codes."
|
|
|
|
pushd "$COCOS2DX_ROOT/tools/tolua"
|
|
|
|
./genbindings.py
|
|
|
|
popd
|
|
|
|
|
2017-12-07 13:34:12 +08:00
|
|
|
# We don't support building js projects for linux platform,
|
|
|
|
# therefore, don't generate js-binding code for it.
|
|
|
|
if [ $TRAVIS_OS_NAME != "linux" ] || [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
|
|
|
|
echo "Create auto-generated jsbinding glue codes."
|
|
|
|
pushd "$COCOS2DX_ROOT/tools/tojs"
|
|
|
|
./genbindings.py
|
|
|
|
popd
|
|
|
|
fi
|
2016-09-01 16:25:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function generate_pull_request_for_binding_codes_and_cocosfiles()
|
|
|
|
{
|
|
|
|
COCOS_ROBOT_REMOTE="https://${GH_USER}:${GH_PASSWORD}@github.com/${GH_USER}/cocos2d-x.git"
|
|
|
|
LUA_AUTO_GENERATE_SCRIPT_PATH="$COCOS2DX_ROOT/cocos/scripting/lua-bindings/auto"
|
|
|
|
JS_AUTO_GENERATE_SCRIPT_PATH="$COCOS2DX_ROOT/cocos/scripting/js-bindings/auto"
|
|
|
|
COCOSFILE_PATH="$COCOS2DX_ROOT/templates/cocos2dx_files.json"
|
|
|
|
ELAPSEDSECS=`date +%s`
|
|
|
|
COCOS_BRANCH="update_lua_bindings_$ELAPSEDSECS"
|
|
|
|
COMMITTAG="[ci skip][AUTO]: updating luabinding & jsbinding & cocos_file.json automatically"
|
|
|
|
PULL_REQUEST_REPO="https://api.github.com/repos/cocos2d/cocos2d-x/pulls"
|
|
|
|
|
|
|
|
pushd "$COCOS2DX_ROOT"
|
|
|
|
#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
|
|
|
|
|
|
|
|
# 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"
|
|
|
|
LUA_DIFF_RETVAL=$?
|
|
|
|
|
|
|
|
git diff FETCH_HEAD --stat --exit-code "$JS_AUTO_GENERATE_SCRIPT_PATH"
|
|
|
|
JS_DIFF_RETVAL=$?
|
|
|
|
|
|
|
|
# generate cocos_files.json and check diff
|
|
|
|
echo "Updates cocos_files.json"
|
2016-09-01 18:54:49 +08:00
|
|
|
$COCOS2DX_ROOT/tools/travis-scripts/generate-template-files.py
|
2016-09-01 16:25:47 +08:00
|
|
|
git diff FETCH_HEAD --stat --exit-code "$COCOSFILE_PATH"
|
|
|
|
COCOSFILE_DIFF_RETVAL=$?
|
|
|
|
|
|
|
|
if [ $LUA_DIFF_RETVAL -eq 0 ] && [ $JS_DIFF_RETVAL -eq 0 ] && [ $COCOSFILE_DIFF_RETVAL -eq 0 ]; then
|
|
|
|
echo
|
|
|
|
echo "No differences in generated files"
|
|
|
|
echo "Exiting with success."
|
|
|
|
echo
|
2014-03-10 18:13:39 +08:00
|
|
|
exit 0
|
2016-09-01 16:25:47 +08:00
|
|
|
else
|
|
|
|
echo
|
|
|
|
echo "Generated files differ from HEAD. Continuing."
|
|
|
|
echo
|
2014-03-10 18:13:39 +08:00
|
|
|
fi
|
2016-09-01 16:25:47 +08:00
|
|
|
|
|
|
|
# Exit on error
|
|
|
|
set -e
|
|
|
|
|
|
|
|
git add -f --all "$LUA_AUTO_GENERATE_SCRIPT_PATH"
|
|
|
|
git add -f --all "$JS_AUTO_GENERATE_SCRIPT_PATH"
|
|
|
|
git add -f --all "$COCOSFILE_PATH"
|
|
|
|
git checkout -b "$COCOS_BRANCH"
|
|
|
|
git commit -m "$COMMITTAG"
|
|
|
|
|
|
|
|
echo "Pushing to Robot's repo ..."
|
|
|
|
git push -fq upstream "$COCOS_BRANCH" 2> /dev/null
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
popd
|
|
|
|
}
|
|
|
|
|
|
|
|
function run_pull_request()
|
|
|
|
{
|
2017-12-07 13:34:12 +08:00
|
|
|
echo "Building pull request ..."
|
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
# need to generate binding codes for all targets
|
|
|
|
genernate_binding_codes
|
|
|
|
|
|
|
|
# linux
|
|
|
|
if [ $BUILD_TARGET == 'linux' ]; then
|
|
|
|
build_linux
|
2014-03-10 18:13:39 +08:00
|
|
|
fi
|
2016-09-01 16:25:47 +08:00
|
|
|
|
|
|
|
# android
|
|
|
|
if [ $BUILD_TARGET == 'android' ]; then
|
|
|
|
build_android
|
2014-03-10 18:13:39 +08:00
|
|
|
fi
|
2016-09-01 16:25:47 +08:00
|
|
|
|
|
|
|
if [ $BUILD_TARGET == 'mac' ]; then
|
|
|
|
build_mac
|
2014-03-10 18:13:39 +08:00
|
|
|
fi
|
2014-02-13 11:33:11 +08:00
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
if [ $BUILD_TARGET == 'ios' ]; then
|
|
|
|
build_ios
|
2014-02-13 11:33:11 +08:00
|
|
|
fi
|
2016-09-01 16:25:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function run_after_merge()
|
|
|
|
{
|
2017-12-07 13:34:12 +08:00
|
|
|
echo "Building merge commit ..."
|
2016-09-01 16:25:47 +08:00
|
|
|
# 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).
|
2014-02-13 11:33:11 +08:00
|
|
|
if [ -z "${GH_EMAIL}" ]; then
|
|
|
|
echo "GH_EMAIL not set"
|
2014-02-27 16:23:38 +08:00
|
|
|
exit 1
|
2014-02-13 11:33:11 +08:00
|
|
|
fi
|
|
|
|
if [ -z "${GH_USER}" ]; then
|
|
|
|
echo "GH_USER not set"
|
2014-02-27 16:23:38 +08:00
|
|
|
exit 1
|
2014-02-13 11:33:11 +08:00
|
|
|
fi
|
|
|
|
if [ -z "${GH_PASSWORD}" ]; then
|
|
|
|
echo "GH_USER not set"
|
2014-02-27 16:23:38 +08:00
|
|
|
exit 1
|
2014-02-13 11:33:11 +08:00
|
|
|
fi
|
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
genernate_binding_codes
|
|
|
|
generate_pull_request_for_binding_codes_and_cocosfiles
|
|
|
|
}
|
2013-06-25 01:41:48 +08:00
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
# build pull request
|
|
|
|
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
|
|
|
run_pull_request
|
|
|
|
fi
|
2014-05-12 21:55:11 +08:00
|
|
|
|
2016-09-01 16:25:47 +08:00
|
|
|
# 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
|
2016-09-01 18:54:49 +08:00
|
|
|
# only one job need to send PR, linux virtual machine has better performance
|
|
|
|
if [ $TRAVIS_OS_NAME == "linux" ] && [ $GEN_BINDING_AND_COCOSFILE == "true" ]; then
|
|
|
|
run_after_merge
|
|
|
|
fi
|
2013-05-21 16:13:47 +08:00
|
|
|
fi
|