2012-09-25 07:16:14 +08:00
#!/bin/bash
# Generate JS bindings for Cocos2D-X
# ... using Android NDK system headers
2012-10-10 03:20:40 +08:00
# ... and automatically update submodule references
# ... and push these changes to remote repos
2012-09-25 07:16:14 +08:00
2012-10-10 03:20:40 +08:00
# Dependencies
#
# For bindings generator:
# (see ../../../tojs/genbindings.sh
2012-09-26 04:55:06 +08:00
# ... for the defaults used if the environment is not customized)
#
2012-09-25 07:16:14 +08:00
# * $PYTHON_BIN
# * $CLANG_ROOT
# * $NDK_ROOT
2012-10-10 03:20:40 +08:00
#
# For automatically pushing changes:
#
# * REMOTE_AUTOGEN_BINDINGS_REPOSITORY
2012-10-16 06:12:17 +08:00
# * REMOTE_COCOS2DX_REPOSITORY
# * Note : Ensure you have commit access to above repositories
# * COCOS2DX_PULL_BASE
# * hub
# * see http://defunkt.io/hub/
# * Ensure that hub has an OAuth token to REMOTE_COCOS2DX_REPOSITORY
# * see http://defunkt.io/hub/hub.1.html#CONFIGURATION
2012-09-25 07:16:14 +08:00
2012-10-10 23:08:52 +08:00
DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
COCOS2DX_ROOT = " $DIR " /../../../..
2012-10-29 18:47:03 +08:00
GENERATED_WORKTREE = " $COCOS2DX_ROOT " /scripting/javascript/bindings/generated
2012-10-10 23:08:52 +08:00
2012-10-16 06:12:17 +08:00
if [ -z " ${ HUB +aaa } " ] ; then
# ... if HUB is not set, use "$HOME/bin/hub"
HUB = " $HOME /bin/hub "
fi
2012-10-30 17:54:48 +08:00
# Update cocos2d-x repo
# It needs to be updated in Jenkins command before executing this script.
#pushd "$COCOS2DX_ROOT"
2012-10-29 18:47:03 +08:00
2012-10-30 17:54:48 +08:00
#git checkout -f
#git checkout gles20
#git pull upstream gles20
#rm -rf "$GENERATED_WORKTREE"
#git submodule update --init
2012-10-29 18:47:03 +08:00
2012-10-30 17:54:48 +08:00
#popd
2012-10-29 18:47:03 +08:00
2012-10-30 17:54:48 +08:00
# Update submodule of auto-gen JSBinding repo.
2012-10-29 18:47:03 +08:00
pushd " $GENERATED_WORKTREE "
git checkout -f
2013-02-20 11:07:42 +08:00
git clean -fdx
git fetch origin
git checkout -B master origin/master
2012-10-29 18:47:03 +08:00
2013-03-10 16:10:16 +08:00
# Delete all directories and files except '.git' and 'README'.
ls -a | grep -E -v ^\[ .\] \{ 1,2\} $ | grep -E -v ^\. git$ | grep -E -v ^README$ | xargs -I{ } rm -rf { }
2012-10-29 18:47:03 +08:00
popd
2012-10-16 05:27:54 +08:00
# Exit on error
set -e
2012-10-10 23:08:52 +08:00
# 1. Generate JS bindings
COCOS2DX_ROOT = " $COCOS2DX_ROOT " /bin/bash ../../../tojs/genbindings.sh
echo
echo Bindings generated successfully
echo
2012-10-10 03:20:40 +08:00
if [ -z " ${ REMOTE_AUTOGEN_BINDINGS_REPOSITORY +aaa } " ] ; then
2012-10-10 23:08:52 +08:00
echo
2012-10-10 03:20:40 +08:00
echo Environment variable must be set REMOTE_AUTOGEN_BINDINGS_REPOSITORY
2012-10-10 23:08:52 +08:00
echo This script expects to automatically push changes
echo to this repo
2012-10-16 07:30:03 +08:00
echo example
echo REMOTE_AUTOGEN_BINDINGS_REPOSITORY = \" git@github.com:folecr/cocos2dx-autogen-bindings.git\"
echo REMOTE_AUTOGEN_BINDINGS_REPOSITORY = \" \$ HOME/test/cocos2dx-autogen-bindings\"
2012-10-10 23:08:52 +08:00
echo
echo Exiting with failure.
echo
2012-09-25 07:16:14 +08:00
exit 1
fi
2012-10-10 03:20:40 +08:00
if [ -z " ${ COMMITTAG +aaa } " ] ; then
# ... if COMMITTAG is not set, use this machine's hostname
COMMITTAG = ` hostname -s`
fi
2012-10-15 13:13:21 +08:00
echo
2012-10-10 03:20:40 +08:00
echo Using " ' $COMMITTAG ' " in the commit messages
2012-10-15 13:13:21 +08:00
echo
2012-10-10 03:20:40 +08:00
ELAPSEDSECS = ` date +%s`
echo Using " $ELAPSEDSECS " in the branch names for pseudo-uniqueness
GENERATED_BRANCH = autogeneratedbindings_" $ELAPSEDSECS "
2012-10-29 18:47:03 +08:00
2012-10-10 03:20:40 +08:00
2012-10-15 13:13:21 +08:00
# 2. In JSBindings repo, Check if there are any files that are different from the index
2012-10-16 07:26:01 +08:00
pushd " $GENERATED_WORKTREE "
2012-10-15 13:13:21 +08:00
# Run status to record the output in the log
2012-10-16 07:26:01 +08:00
git status
2012-10-10 03:20:40 +08:00
2012-10-15 13:13:21 +08:00
echo
2012-10-16 04:23:44 +08:00
echo Comparing with origin/master ...
2012-10-15 13:13:21 +08:00
echo
2012-10-16 05:27:54 +08:00
# Don't exit on non-zero return value
set +e
2012-10-16 07:26:01 +08:00
git diff --stat --exit-code origin/master
2012-10-15 13:13:21 +08:00
DIFF_RETVAL = $?
if [ $DIFF_RETVAL -eq 0 ]
then
echo
echo "No differences in generated files"
echo "Exiting with success."
echo
exit 0
else
echo
2012-10-16 04:23:44 +08:00
echo "Generated files differ from origin/master. Continuing."
2012-10-15 13:13:21 +08:00
echo
fi
2012-10-16 05:27:54 +08:00
# Exit on error
set -e
2012-10-15 13:13:21 +08:00
# 3. In JSBindings repo, Check out a branch named "autogeneratedbindings" and commit the auto generated bindings to it
2012-10-29 18:47:03 +08:00
git checkout -b " $GENERATED_BRANCH "
2013-03-10 16:10:16 +08:00
git add --verbose .
git add --verbose -u .
2012-10-16 07:26:01 +08:00
git commit --verbose -m " $COMMITTAG : autogenerated bindings "
2012-10-10 03:20:40 +08:00
2012-10-15 13:13:21 +08:00
# 4. In JSBindings repo, Push the commit with generated bindings to "master" of the auto generated bindings repository
2012-10-16 07:26:01 +08:00
git push --verbose " $REMOTE_AUTOGEN_BINDINGS_REPOSITORY " " $GENERATED_BRANCH " :master
popd
2012-10-10 03:20:40 +08:00
2012-10-10 12:36:32 +08:00
if [ -z " ${ REMOTE_COCOS2DX_REPOSITORY +aaa } " ] ; then
2012-10-10 23:08:52 +08:00
echo
echo Environment variable is not set REMOTE_COCOS2DX_REPOSITORY
echo This script will NOT automatically push changes
echo unless this variable is set.
2012-10-16 07:30:03 +08:00
echo example
echo REMOTE_COCOS2DX_REPOSITORY = \" git@github.com:cocos2d/cocos2d-x.git\"
echo REMOTE_COCOS2DX_REPOSITORY = \" \$ HOME/test/cocos2d-x\"
2012-10-10 23:08:52 +08:00
echo
echo Exiting with success.
echo
exit 0
2012-10-10 12:36:32 +08:00
fi
2012-10-10 23:08:52 +08:00
COCOS_BRANCH = updategeneratedsubmodule_" $ELAPSEDSECS "
2012-10-10 03:20:40 +08:00
pushd " ${ DIR } "
2012-10-15 13:13:21 +08:00
# 5. In Cocos2D-X repo, Checkout a branch named "updategeneratedsubmodule" Update the submodule reference to point to the commit with generated bindings
2012-10-10 03:20:40 +08:00
cd " ${ COCOS2DX_ROOT } "
git add scripting/javascript/bindings/generated
2012-10-29 18:47:03 +08:00
git checkout -b " $COCOS_BRANCH "
2012-10-10 03:20:40 +08:00
git commit -m " $COMMITTAG : updating submodule reference to latest autogenerated bindings "
2012-10-15 13:13:21 +08:00
# 6. In Cocos2D-X repo, Push the commit with updated submodule to "gles20" of the cocos2d-x repository
2012-10-16 06:12:17 +08:00
git push " $REMOTE_COCOS2DX_REPOSITORY " " $COCOS_BRANCH "
if [ -z " ${ COCOS2DX_PULL_BASE +aaa } " ] ; then
echo
echo Environment variable is not set COCOS2DX_PULL_BASE
echo This script will NOT automatically generate pull requests
echo unless this variable is set.
2012-10-16 07:30:03 +08:00
echo example
echo COCOS2DX_PULL_BASE = \" cocos2d/cocos2d-x:gles20\"
echo COCOS2DX_PULL_BASE = \" username/repository:branch\"
2012-10-16 06:12:17 +08:00
echo
echo Exiting with success.
echo
exit 0
fi
# 7.
${ HUB } pull-request " $COMMITTAG : updating submodule reference to latest autogenerated bindings " -b " $COCOS2DX_PULL_BASE " -h " $COCOS_BRANCH "
2012-10-10 03:20:40 +08:00
popd