| # This was borrowed from https://github.com/travis-ci/travis-build/tree/master/lib/travis/build/bash |
| # to get around https://github.com/travis-ci/travis-ci/issues/9979. It should probably be removed |
| # as soon as Travis CI has started to provide an easy way to export the functions to bash scripts. |
| |
| travis_jigger() { |
| local cmd_pid="${1}" |
| shift |
| local timeout="${1}" |
| shift |
| local count=0 |
| |
| echo -e "\\n" |
| |
| while [[ "${count}" -lt "${timeout}" ]]; do |
| count="$((count + 1))" |
| echo -ne "Still running (${count} of ${timeout}): ${*}\\r" |
| sleep 60 |
| done |
| |
| echo -e "\\n${ANSI_RED}Timeout (${timeout} minutes) reached. Terminating \"${*}\"${ANSI_RESET}\\n" |
| kill -9 "${cmd_pid}" |
| } |
| |
| travis_wait() { |
| local timeout="${1}" |
| |
| if [[ "${timeout}" =~ ^[0-9]+$ ]]; then |
| shift |
| else |
| timeout=20 |
| fi |
| |
| local cmd=("${@}") |
| local log_file="travis_wait_${$}.log" |
| |
| "${cmd[@]}" &>"${log_file}" & |
| local cmd_pid="${!}" |
| |
| travis_jigger "${!}" "${timeout}" "${cmd[@]}" & |
| local jigger_pid="${!}" |
| local result |
| |
| { |
| set +e |
| wait "${cmd_pid}" 2>/dev/null |
| result="${?}" |
| ps -p"${jigger_pid}" &>/dev/null && kill "${jigger_pid}" |
| set -e |
| } |
| |
| if [[ "${result}" -eq 0 ]]; then |
| echo -e "\\n${ANSI_GREEN}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}" |
| else |
| echo -e "\\n${ANSI_RED}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}" |
| fi |
| |
| echo -e "\\n${ANSI_GREEN}Log:${ANSI_RESET}\\n" |
| cat "${log_file}" |
| |
| return "${result}" |
| } |