#!/bin/bash
set -x
. /root/mason.conf
REPORT_PATH=/root/report.html
SERVER_PATH=/srv/mason
sed_escape() {
printf "%s\n" "$1" | sed -e 's/\W/\\&/g'
}
create_report() {
cat > $REPORT_PATH <<'EOF'
Mason
Baserock: Continuous Delivery
Build log of changes to BRANCH
from TROVE
. Most recent first.
Started |
Ref |
Duration |
Result |
EOF
sed -i 's/BRANCH/'"$(sed_escape "$1")"'/' $REPORT_PATH
sed -i 's/TROVE/'"$(sed_escape "$2")"'/' $REPORT_PATH
}
update_report() {
# Give function params sensible names
build_start_time="$1"
build_trove_host="$2"
build_ref="$3"
build_sha1="$4"
build_duration="$5"
build_result="$6"
# Generate template if report file is not there
if [ ! -f $REPORT_PATH ]; then
create_report $build_ref $build_trove_host
fi
# Build table row for insertion into report file
if [ "$build_result" = nonet ]; then
msg=''"${build_start_time}"' | Failed to contact '"${build_trove_host}"' | '"${build_duration}s"' | '"${build_result}"' |
'
else
msg=''"${build_start_time}"' | '"${build_sha1}"' | '"${build_duration}s"' | '"${build_result}"' |
'
fi
# Insert report line, newest at top
sed -i 's//\n'"$(sed_escape "$msg")"'/' $REPORT_PATH
}
START_TIME=`date +%Y-%m-%d\ %T`
logfile="$(mktemp)"
/root/mason.sh 2>&1 | tee "$logfile"
case "${PIPESTATUS[0]}" in
0)
RESULT=pass
;;
33)
RESULT=skip
;;
42)
RESULT=nonet
;;
*)
RESULT=fail
;;
esac
# TODO: Update page with last executed time
if [ "$RESULT" = skip ]; then
rm "$logfile"
exit 0
fi
DURATION=$(( $(date +%s) - $(date --date="$START_TIME" +%s) ))
SHA1="$(cd "ws/$DEFINITIONS_REF/$DISTBUILD_TROVE_ADDRESS/baserock/baserock/definitions" && git rev-parse HEAD)"
update_report "$START_TIME" \
"$DISTBUILD_TROVE_ADDRESS" \
"$DEFINITIONS_REF" \
"$SHA1" \
"$DURATION" \
"$RESULT"
#
# Copy report into server directory
#
cp "$REPORT_PATH" "$SERVER_PATH/index.html"
mkdir /srv/mason/log
mv "$logfile" /srv/mason/log/"$SHA1--$START_TIME.log"