angular-cn/scripts/ci/_travis-fold.sh

84 lines
3.3 KiB
Bash

# private variable to track folds within this script
travisFoldStack=()
function travisFoldStart() {
local foldName="${0#./} ${1}"
# get current time as nanoseconds since the beginning of the epoch
foldStartTime=$(date +%s%N)
# convert all non alphanum chars except for "-" and "." to "--"
local sanitizedFoldName=${foldName//[^[:alnum:]\-\.]/--}
# strip trailing "-"
sanitizedFoldName=${sanitizedFoldName%-}
# push the foldName onto the stack
travisFoldStack+=("${sanitizedFoldName}|${foldStartTime}")
echo ""
if [[ ${TRAVIS:-} ]]; then
echo "travis_fold:start:${sanitizedFoldName}"
echo "travis_time:start:${sanitizedFoldName}"
fi
local enterArrow="===> ${foldName} ==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>"
# keep all messages consistently wide 80chars regardless of the foldName
echo ${enterArrow:0:100}
if [[ ${2:-} != "no-xtrace" ]]; then
# turn on verbose mode so that we have better visibility into what's going on
# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html#table_02_01
set -x
fi
}
function travisFoldEnd() {
set +x
local foldName="${0#./} ${1}"
# convert all non alphanum chars except for "-" and "." to "--"
local sanitizedFoldName=${foldName//[^[:alnum:]\-\.]/--}
# strip trailing "-"
sanitizedFoldName=${sanitizedFoldName%-}
# consult and update travisFoldStack
local lastFoldIndex=$(expr ${#travisFoldStack[@]} - 1)
local lastFoldString=${travisFoldStack[$lastFoldIndex]}
# split the string by | and then turn that into an array
local lastFoldArray=(${lastFoldString//\|/ })
local lastSanitizedFoldName=${lastFoldArray[0]}
if [[ ${TRAVIS:-} ]]; then
local lastFoldStartTime=${lastFoldArray[1]}
local foldFinishTime=$(date +%s%N)
local foldDuration=$(expr ${foldFinishTime} - ${lastFoldStartTime})
# write into build-perf.log file
local logIndent=$(expr ${lastFoldIndex} \* 2)
printf "%6ss%${logIndent}s: %s\n" $(expr ${foldDuration} / 1000000000) " " "${foldName}" >> ${LOGS_DIR}/build-perf.log
fi
# pop
travisFoldStack=(${travisFoldStack[@]:0:lastFoldIndex})
# check for misalignment
if [[ ${lastSanitizedFoldName} != ${sanitizedFoldName} ]]; then
echo "Travis fold mis-alignment detected! travisFoldEnd expected sanitized fold name '${lastSanitizedFoldName}', but received '${sanitizedFoldName}' (after sanitization)"
exit 1
fi
local returnArrow="<=== ${foldName} <==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<=="
# keep all messages consistently wide 80chars regardless of the foldName
echo ${returnArrow:0:100}
echo ""
if [[ ${TRAVIS:-} ]]; then
echo "travis_time:end:${sanitizedFoldName}:start=${lastFoldStartTime},finish=${foldFinishTime},duration=${foldDuration}"
echo "travis_fold:end:${sanitizedFoldName}"
fi
}
function travisFoldReturnArrows() {
# print out return arrows so that it's easy to see the end of the script in the log
echo ""
returnArrow="<=== ${0#./} <==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<=="
# keep all messages consistently wide 80chars regardless of the foldName
echo ${returnArrow:0:100}
echo "<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==="
echo ""
}