summaryrefslogtreecommitdiffstats
path: root/src/rocksdb/build_tools/cont_integration.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/rocksdb/build_tools/cont_integration.sh')
-rwxr-xr-xsrc/rocksdb/build_tools/cont_integration.sh137
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