blob: 7dbc5933cebb3f8431a833ee3834f735cde110d9 [file] [log] [blame]
#!/bin/bash
VENV=$1
LOGFILE=$2
CONFIG=$3
if [ -z "$VENV" ]; then
VENV=/home/cltbld/release-runner/venv
fi
if [ ! -e "$VENV" ]; then
echo "Could not find Python virtual environment '$VENV'"
exit 1
fi
if [ -z "$LOGFILE" ]; then
LOGFILE=/var/log/supervisor/release-runner.log
fi
LOGFILE_DIR=$(dirname $LOGFILE)
if [ ! -e $LOGFILE_DIR ]; then
echo "Could not find directory '$LOGFILE_DIR' for the logs"
exit 1
fi
if [ -z "$CONFIG" ]; then
CONFIG=/home/cltbld/.release-runner.ini
fi
if [ ! -e "$CONFIG" ]; then
echo "Could not find configuration file '$CONFIG'"
exit 1
fi
# Mozilla hg is symlinked as /usr/local/bin/hg
export PATH=/usr/local/bin:$PATH
. $VENV/bin/activate
# Sleep time after a failure, in seconds.
SLEEP_TIME=60
NOTIFY_TO=$(grep "notify_to:" $CONFIG|perl -pe 's/.*?<(.*?)>/$1 /g')
if [ -z "$NOTIFY_TO" ]; then
NOTIFY_TO="release@mozilla.com"
fi
NOTIFY_FROM=$(grep "notify_from:" $CONFIG|perl -pe 's/.*?<(.*?)>/$1 /g')
if [ -z "$NOTIFY_FROM" ]; then
NOTIFY_FROM="release@mozilla.com"
fi
SUBJECT_TAG="[dev-release-runner]"
if [ -n "`grep release-automation-notifications@mozilla.com $CONFIG`" ]; then
SUBJECT_TAG="[release-runner]"
fi
CURR_DIR=$(cd $(dirname $0); pwd)
HOSTNAME=`hostname -s`
cd $CURR_DIR
python release-runner.py -c $CONFIG
RETVAL=$?
# Exit code 5 is a failure during polling. We don't want to send mail about
# this, because it will just try again after sleeping.
if [[ $RETVAL == 5 ]]; then
sleep $SLEEP_TIME;
# Any other non-zero exit code is some other issue, and we should send mail
# about it.
elif [[ $RETVAL != 0 ]]; then
# Super crazy sed magic below to grab everything from the last run.
# Explanation of it:
# H = append each line to the hold space while iterating through the file.
# If "Fetching release requests" appears in a line, replace the hold space
# buffer with it. This happens every time we encounter this pattern, so
# eventually we'll end up only the last instance of it (and what follows)
# in the hold space.
# ${...} = stuff do to do when we hit EOF
# g = copy the hold space into the pattern space
# p = print the pattern space (ie, the the last instance of
# "Fetching release requests" and what follows).
#
# If for some reason we have a log file that doesn't have
# "Fetching release requests" in it, the entire file will be printed.
# It's doubtful this will happen, so we won't waste time dealing with yet.
(
echo "Release runner encountered a runtime error: "
sed -n 'H;/Fetching release requests/h; ${;g;p;}' $LOGFILE
echo
echo "The full log is available on $HOSTNAME in $LOGFILE"
echo "I'll sleep for $SLEEP_TIME seconds before retry"
echo
echo "- release runner"
) | mail -s "${SUBJECT_TAG} failed" -r $NOTIFY_FROM $NOTIFY_TO
sleep $SLEEP_TIME
fi