about summary refs log tree commit diff
path: root/src/ci/docker/scripts/shared.sh
diff options
context:
space:
mode:
authorThe Miri Cronjob Bot <miri@cron.bot>2025-06-05 05:02:35 +0000
committerThe Miri Cronjob Bot <miri@cron.bot>2025-06-05 05:02:35 +0000
commitbd898e38afecfd1c2ae30067e6170bda8a8c4db6 (patch)
tree298b738d03e31ec9228ddac11ef2854dcbb54e5b /src/ci/docker/scripts/shared.sh
parent869baeaf9207e86fa9a8e8a3319d7ae080e4a07c (diff)
parentfa282f4928f88060159f8599106c055ba0c94a19 (diff)
downloadrust-bd898e38afecfd1c2ae30067e6170bda8a8c4db6.tar.gz
rust-bd898e38afecfd1c2ae30067e6170bda8a8c4db6.zip
Merge from rustc
Diffstat (limited to 'src/ci/docker/scripts/shared.sh')
-rw-r--r--src/ci/docker/scripts/shared.sh34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/ci/docker/scripts/shared.sh b/src/ci/docker/scripts/shared.sh
index 9969659088d..6efdbb2070d 100644
--- a/src/ci/docker/scripts/shared.sh
+++ b/src/ci/docker/scripts/shared.sh
@@ -40,3 +40,37 @@ function retry {
     }
   done
 }
+
+download_tar_and_extract_into_dir() {
+  local url="$1"
+  local sum="$2"
+  local dir="$3"
+  local file=$(mktemp -u)
+
+  while :; do
+    if [[ -f "$file" ]]; then
+      if ! h="$(sha256sum "$file" | awk '{ print $1 }')"; then
+        printf 'ERROR: reading hash\n' >&2
+        exit 1
+      fi
+
+      if [[ "$h" == "$sum" ]]; then
+        break
+      fi
+
+      printf 'WARNING: hash mismatch: %s != expected %s\n' "$h" "$sum" >&2
+      rm -f "$file"
+    fi
+
+    printf 'Downloading: %s\n' "$url"
+    if ! curl -f -L -o "$file" "$url"; then
+       rm -f "$file"
+      sleep 1
+    fi
+  done
+
+  mkdir -p "$dir"
+  cd "$dir"
+  tar -xf "$file"
+  rm -f "$file"
+}