2013-05-13 15:18:18 +08:00
#!/bin/bash
# Generate JS bindings for Cocos2D-X
# ... using Android NDK system headers
# ... and automatically update submodule references
# ... and push these changes to remote repos
# Dependencies
#
# For bindings generator:
# (see ../../../tojs/genbindings.sh
# ... for the defaults used if the environment is not customized)
#
# * $PYTHON_BIN
# * $CLANG_ROOT
# * $NDK_ROOT
#
# For automatically pushing changes:
#
# * REMOTE_AUTOGEN_BINDINGS_REPOSITORY
# * 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
#Set git user
git config --global user.email "CocosRobot@gmail.com"
git config --global user.name "CocosRobot"
DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
COCOS2DX_ROOT = " $DIR " /../..
TOJS_ROOT = $COCOS2DX_ROOT /tools/tojs
GENERATED_WORKTREE = " $COCOS2DX_ROOT " /scripting/javascript/bindings/generated
2013-05-20 23:27:40 +08:00
REMOTE_AUTOGEN_BINDINGS_REPOSITORY = "https://github.com/folecr/cocos2dx-autogen-bindings.git"
REMOTE_COCOS2DX_REPOSITORY = "https://github.com/CocosRobot/cocos2d-x.git"
COCOS2DX_PULL_BASE = "cocos2d/cocos2d-x:master"
2013-05-13 15:18:18 +08:00
sudo apt-get --force-yes --yes install python-yaml python-cheetah
# Update cocos2d-x repo
# It needs to be updated in Jenkins command before executing this script.
#pushd "$COCOS2DX_ROOT"
#git checkout -f
#git checkout gles20
#git pull upstream gles20
#rm -rf "$GENERATED_WORKTREE"
#git submodule update --init
#popd
# Update submodule of auto-gen JSBinding repo.
pushd " $GENERATED_WORKTREE "
git checkout -B master
#Set remotes
2013-05-20 23:27:40 +08:00
git remote add upstream https://${ GH_TOKEN } @github.com/folecr/cocos2dx-autogen-bindings.git 2> /dev/null > /dev/null
2013-05-13 15:18:18 +08:00
echo "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 { }
echo "Show files in scripting/javascript/bindings/generated folder."
ls -a
popd
# Exit on error
set -e
# 1. Generate JS bindings
pushd " $TOJS_ROOT "
./genbindings.sh
popd
echo
echo Bindings generated successfully
echo
if [ -z " ${ REMOTE_AUTOGEN_BINDINGS_REPOSITORY +aaa } " ] ; then
echo
echo Environment variable must be set REMOTE_AUTOGEN_BINDINGS_REPOSITORY
echo This script expects to automatically push changes
echo to this repo
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\"
echo
echo Exiting with failure.
echo
exit 1
fi
if [ -z " ${ COMMITTAG +aaa } " ] ; then
# ... if COMMITTAG is not set, use this machine's hostname
COMMITTAG = ` hostname -s`
fi
echo
echo Using " ' $COMMITTAG ' " in the commit messages
echo
ELAPSEDSECS = ` date +%s`
echo Using " $ELAPSEDSECS " in the branch names for pseudo-uniqueness
GENERATED_BRANCH = autogeneratedbindings_" $ELAPSEDSECS "
# 2. In JSBindings repo, Check if there are any files that are different from the index
pushd " $GENERATED_WORKTREE "
# Run status to record the output in the log
git status
echo
echo Comparing with HEAD ...
echo
# Don't exit on non-zero return value
set +e
git diff --stat --exit-code
DIFF_RETVAL = $?
if [ $DIFF_RETVAL -eq 0 ]
then
echo
echo "No differences in generated files"
echo "Exiting with success."
echo
exit 0
else
echo
echo "Generated files differ from HEAD. Continuing."
echo
fi
# Exit on error
set -e
# 3. In JSBindings repo, Check out a branch named "autogeneratedbindings" and commit the auto generated bindings to it
git checkout -b " $GENERATED_BRANCH "
git add --verbose .
git add --verbose -u .
git commit --verbose -m " $COMMITTAG : autogenerated bindings "
# 4. In JSBindings repo, Push the commit with generated bindings to "master" of the auto generated bindings repository
git push -fq upstream " $GENERATED_BRANCH " :master 2> /dev/null
popd
if [ -z " ${ REMOTE_COCOS2DX_REPOSITORY +aaa } " ] ; then
echo
echo Environment variable is not set REMOTE_COCOS2DX_REPOSITORY
echo This script will NOT automatically push changes
echo unless this variable is set.
echo example
echo REMOTE_COCOS2DX_REPOSITORY = \" git@github.com:cocos2d/cocos2d-x.git\"
echo REMOTE_COCOS2DX_REPOSITORY = \" \$ HOME/test/cocos2d-x\"
echo
echo Exiting with success.
echo
exit 0
fi
COCOS_BRANCH = updategeneratedsubmodule_" $ELAPSEDSECS "
pushd " ${ DIR } "
# 5. In Cocos2D-X repo, Checkout a branch named "updategeneratedsubmodule" Update the submodule reference to point to the commit with generated bindings
cd " ${ COCOS2DX_ROOT } "
git add scripting/javascript/bindings/generated
git checkout -b " $COCOS_BRANCH "
git commit -m " $COMMITTAG : updating submodule reference to latest autogenerated bindings "
#Set remotes
2013-05-20 23:27:40 +08:00
git remote add upstream https://${ GH_TOKEN } @github.com/CocosRobot/cocos2d-x.git 2> /dev/null > /dev/null
2013-05-13 15:18:18 +08:00
# 6. In Cocos2D-X repo, Push the commit with updated submodule to "master" of the cocos2d-x repository
git push -fq upstream " $COCOS_BRANCH " 2> /dev/null
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.
echo example
echo COCOS2DX_PULL_BASE = \" cocos2d/cocos2d-x:master\"
echo COCOS2DX_PULL_BASE = \" username/repository:branch\"
echo
echo Exiting with success.
echo
exit 0
fi
# 7.
2013-05-20 23:27:40 +08:00
curl --user " CocosRobot: $GH_PASSWORD " --request POST --data " { \"title\": \" $COMMITTAG : updating submodule reference to latest autogenerated bindings\", \"body\": \"\", \"head\": \"CocosRobot: ${ COCOS_BRANCH } \", \"base\": \"master\"} " https://api.github.com/repos/cocos2d/cocos2d-x/pulls 2> /dev/null > /dev/null
2013-05-13 15:18:18 +08:00
# ${HUB} pull-request "$COMMITTAG : updating submodule reference to latest autogenerated bindings" -b "$COCOS2DX_PULL_BASE" -h "$COCOS_BRANCH"
popd