diff options
Diffstat (limited to 'src/rocksdb/build_tools/cont_integration.sh')
-rwxr-xr-x | src/rocksdb/build_tools/cont_integration.sh | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/rocksdb/build_tools/cont_integration.sh b/src/rocksdb/build_tools/cont_integration.sh new file mode 100755 index 00000000..66d25522 --- /dev/null +++ b/src/rocksdb/build_tools/cont_integration.sh @@ -0,0 +1,137 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2016, Facebook. All rights reserved. +# +# Overall wrapper script for RocksDB continuous builds. The implementation is a +# trivial pulling scheme. We loop infinitely, check if any new changes have been +# committed, if yes then trigger a Sandcastle run, and finally go to sleep again +# for a certain interval. +# + +SRC_GIT_REPO=/data/git/rocksdb-public +error=0 + +function log { + DATE=`date +%Y-%m-%d:%H:%M:%S` + # shellcheck disable=SC2068 + echo $DATE $@ +} + +function log_err { + # shellcheck disable=SC2145 + log "ERROR: $@ Error code: $error." +} + +function update_repo_status { + # Update the parent first. + pushd $SRC_GIT_REPO + + # This is a fatal error. Something in the environment isn't right and we will + # terminate the execution. + error=$? + if [ ! $error -eq 0 ]; then + log_err "Where is $SRC_GIT_REPO?" + exit $error + fi + + HTTPS_PROXY=fwdproxy:8080 git fetch -f + + error=$? + if [ ! $error -eq 0 ]; then + log_err "git fetch -f failed." + popd + return $error + fi + + git update-ref refs/heads/master refs/remotes/origin/master + + error=$? + if [ ! $error -eq 0 ]; then + log_err "git update-ref failed." + popd + return $error + fi + + popd + + # We're back in an instance-specific directory. Get the latest changes. + git pull --rebase + + error=$? + if [ ! $error -eq 0 ]; then + log_err "git pull --rebase failed." + return $error + fi +} + +# +# Execution starts here. +# + +# Path to the determinator from the root of the RocksDB repo. +CONTRUN_DETERMINATOR=./build_tools/RocksDBCommonHelper.php + +# Value of the previous commit. +PREV_COMMIT= + +log "Starting to monitor for new RocksDB changes ..." +log "Running under `pwd` as `whoami`." + +# Paranoia. Make sure that we're using the right branch. +git checkout master + +error=$? +if [ ! $error -eq 0 ]; then + log_err "This is not good. Can't checkout master. Bye-bye!" + exit 1 +fi + +# We'll run forever and let the execution environment terminate us if we'll +# exceed whatever timeout is set for the job. +while true; +do + # Get the latest changes committed. + update_repo_status + + error=$? + if [ $error -eq 0 ]; then + LAST_COMMIT=`git log -1 | head -1 | grep commit | awk '{ print $2; }'` + + log "Last commit is '$LAST_COMMIT', previous commit is '$PREV_COMMIT'." + + if [ "$PREV_COMMIT" == "$LAST_COMMIT" ]; then + log "There were no changes since the last time I checked. Going to sleep." + else + if [ ! -z "$LAST_COMMIT" ]; then + log "New code has been committed or previous commit not known. " \ + "Will trigger the tests." + + PREV_COMMIT=$LAST_COMMIT + log "Updated previous commit to '$PREV_COMMIT'." + + # + # This is where we'll trigger the Sandcastle run. The values for + # HTTPS_APP_VALUE and HTTPS_APP_VALUE will be set in the container we're + # running in. + # + POST_RECEIVE_HOOK=1 php $CONTRUN_DETERMINATOR + + error=$? + if [ $error -eq 0 ]; then + log "Sandcastle run successfully triggered." + else + log_err "Failed to trigger Sandcastle run." + fi + else + log_err "Previous commit not updated. Don't know what the last one is." + fi + fi + else + log_err "Getting latest changes failed. Will skip running tests for now." + fi + + # Always sleep, even if errors happens while trying to determine the latest + # commit. This will prevent us terminating in case of transient errors. + log "Will go to sleep for 5 minutes." + sleep 5m +done |