| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!/usr/bin/env bash
- # travis_keepalive runs the given command and preserves its return value,
- # while it forks a child process what periodically produces a log line,
- # so that Travis won't abort the build after 10 minutes.
- # Why?
- # `t.Log()` in Go holds the buffer until the test does not pass or fail,
- # and `-race` can increase the execution time by 2-20x.
- set -euo pipefail
- readonly KEEPALIVE_INTERVAL=300 # seconds => 5m
- main() {
- keepalive
- $@
- }
- # Keepalive produces a log line in each KEEPALIVE_INTERVAL.
- keepalive() {
- local child_pid
- # Note: We fork here!
- repeat "keepalive" &
- child_pid=$!
- ensureChildOnEXIT "${child_pid}"
- }
- repeat() {
- local this="$1"
- while true; do
- echo "${this}"
- sleep "${KEEPALIVE_INTERVAL}"
- done
- }
- # Ensures that the child gets killed on normal program exit.
- ensureChildOnEXIT() {
- # Note: SIGINT and SIGTERM are forwarded to the child process by Bash
- # automatically, so we don't have to deal with signals.
- local child_pid="$1"
- trap "kill ${child_pid}" EXIT
- }
- main "$@"
|