#!/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 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" 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 git remote add upstream https://${GH_TOKEN}@github.com/folecr/cocos2dx-autogen-bindings.git 2> /dev/null > /dev/null 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 git remote add upstream https://${GH_TOKEN}@github.com/CocosRobot/cocos2d-x.git 2> /dev/null > /dev/null # 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. 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 # ${HUB} pull-request "$COMMITTAG : updating submodule reference to latest autogenerated bindings" -b "$COCOS2DX_PULL_BASE" -h "$COCOS_BRANCH" popd