88 lines
2.5 KiB
Bash
88 lines
2.5 KiB
Bash
|
#!/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.
|
||
|
#
|
||
|
|
||
|
function log {
|
||
|
DATE=`date +%Y-%m-%d:%H:%M:%S`
|
||
|
echo $DATE $@
|
||
|
}
|
||
|
|
||
|
function log_err {
|
||
|
log "ERROR: $@. Error code: $?."
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Execution starts here.
|
||
|
#
|
||
|
|
||
|
# Path to the determinator from the root of the RocksDB repo.
|
||
|
CONTRUN_DETERMINATOR=./arcanist_util/config/RocksDBCommonDeterminator.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
|
||
|
|
||
|
if [ ! $? -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.
|
||
|
git pull --rebase
|
||
|
|
||
|
if [ $? -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 know. " \
|
||
|
"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
|
||
|
|
||
|
if [ $? -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 "git pull --rebase 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
|