aboutsummaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorFerenc Szabo <frncmx@gmail.com>2019-02-22 21:20:21 +0800
committerFelix Lange <fjl@users.noreply.github.com>2019-02-22 21:20:21 +0800
commitd9adcd3a27cb14042bdb230f073487192683390c (patch)
tree19293e4e39e67659693340d77099caf730dda9bb /build
parent1993227311f2e67398a5796f3d5a0dbe48c4409f (diff)
downloadgo-tangerine-d9adcd3a27cb14042bdb230f073487192683390c.tar
go-tangerine-d9adcd3a27cb14042bdb230f073487192683390c.tar.gz
go-tangerine-d9adcd3a27cb14042bdb230f073487192683390c.tar.bz2
go-tangerine-d9adcd3a27cb14042bdb230f073487192683390c.tar.lz
go-tangerine-d9adcd3a27cb14042bdb230f073487192683390c.tar.xz
go-tangerine-d9adcd3a27cb14042bdb230f073487192683390c.tar.zst
go-tangerine-d9adcd3a27cb14042bdb230f073487192683390c.zip
travis.yml: add race detector job for Swarm (#19148)
Diffstat (limited to 'build')
-rwxr-xr-xbuild/travis_keepalive.sh46
1 files changed, 46 insertions, 0 deletions
diff --git a/build/travis_keepalive.sh b/build/travis_keepalive.sh
new file mode 100755
index 000000000..77cc623ea
--- /dev/null
+++ b/build/travis_keepalive.sh
@@ -0,0 +1,46 @@
+#!/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 "$@"