|
|
|
#!/bin/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`
|
|
|
|
echo $DATE $@
|
|
|
|
}
|
|
|
|
|
|
|
|
function log_err {
|
|
|
|
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
|