#!/usr/bin/env bash # A cold checkout resolves shared, server, and web against hex.pm in one CI # run from a shared runner IP; one transient hex request should not kill a # run that is otherwise green, so retry each project's download before the # real build/test steps ever touch it. set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")/.." log() { printf '\033[36m[ci-warm-deps]\033[0m %s\n' "$*"; } DELAYS=(5 15) warm() { local dir="$1" attempt=1 while true; do if (cd "$dir" && gleam deps download); then return 0 fi if [ "$attempt" -gt "${#DELAYS[@]}" ]; then echo "ci-warm-deps: $dir failed to resolve deps after $((attempt)) attempts" >&2 return 1 fi local delay="${DELAYS[$((attempt - 1))]}" log "$dir: attempt $attempt failed, retrying in ${delay}s" sleep "$delay" attempt=$((attempt + 1)) done } for dir in shared server web; do log "warming $dir" warm "$dir" done