From 911b54403df4a993322eb626ffd263d6cbbf6e44 Mon Sep 17 00:00:00 2001
From: Yuki Okushi <huyuumi.dev@gmail.com>
Date: Fri, 9 Oct 2020 02:15:04 +0900
Subject: [PATCH] Retry N times on s390x CI to avoid timeout failure

---
 ci/run.sh | 40 ++++++++++++++++++++++++++++++++++------
 1 file changed, 34 insertions(+), 6 deletions(-)

diff --git a/ci/run.sh b/ci/run.sh
index d0938121..6fb059d2 100755
--- a/ci/run.sh
+++ b/ci/run.sh
@@ -82,17 +82,45 @@ if [ "$QEMU" != "" ]; then
   exec egrep "^(PASSED)|(test result: ok)" "${CARGO_TARGET_DIR}/out.log"
 fi
 
-# FIXME: x86_64-unknown-linux-gnux32 fail to compile without --release
+# FIXME: x86_64-unknown-linux-gnux32 fails to compile without --release
 # See https://github.com/rust-lang/rust/issues/59220
 opt=
 if [ "$TARGET" = "x86_64-unknown-linux-gnux32" ]; then
   opt="--release"
 fi
 
-cargo test $opt --no-default-features --manifest-path libc-test/Cargo.toml \
-      --target "${TARGET}"
+if [ "$TARGET" = "s390x-unknown-linux-gnu" ]; then
+  # FIXME: s390x-unknown-linux-gnu often fails to test due to timeout,
+  # so we retry this N times.
+  N=5
+  n=0
+  passed=0
+  until [ $n -ge $N ]
+  do
+    if [ "$passed" = "0" ]; then
+      if cargo test --no-default-features --manifest-path libc-test/Cargo.toml --target "${TARGET}" ; then
+        passed=$((passed+1))
+        continue
+      fi
+    elif [ "$passed" = "1" ]; then
+      if cargo test $opt --manifest-path libc-test/Cargo.toml --target "${TARGET}" ; then
+        passed=$((passed+1))
+        continue
+      fi
+    elif [ "$passed" = "2" ]; then
+      if cargo test $opt --features extra_traits --manifest-path libc-test/Cargo.toml --target "${TARGET}"; then
+        break
+      fi
+    fi
+    n=$((n+1))
+    sleep 1
+  done
+else
+  cargo test $opt --no-default-features --manifest-path libc-test/Cargo.toml \
+    --target "${TARGET}"
 
-cargo test $opt --manifest-path libc-test/Cargo.toml --target "${TARGET}"
+  cargo test $opt --manifest-path libc-test/Cargo.toml --target "${TARGET}"
 
-cargo test $opt --features extra_traits --manifest-path libc-test/Cargo.toml \
-      --target "${TARGET}"
+  cargo test $opt --features extra_traits --manifest-path libc-test/Cargo.toml \
+    --target "${TARGET}"
+fi
-- 
GitLab