diff --git a/scripts/predownload-offline-deps.sh b/scripts/predownload-offline-deps.sh new file mode 100755 index 00000000..a74ebd36 --- /dev/null +++ b/scripts/predownload-offline-deps.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd "$(dirname "$0")/.." + +cache_dir="target/sqlpage_artefacts" +mkdir -p "$cache_dir" + +echo "[1/3] Prefetching Cargo dependencies" +cargo fetch --locked + +echo "[2/3] Prefetching npm dependencies" +npm ci --ignore-scripts --no-audit +if [ -f tests/end-to-end/package-lock.json ]; then + ( + cd tests/end-to-end + npm ci --ignore-scripts --no-audit + ) +fi + +echo "[3/3] Prefetching raw HTTP assets used by build.rs" +mapfile -t urls < <( + { + rg -o --no-filename 'https://[[:alnum:]][[:alnum:].-]*/[^" )]+' build.rs + rg -o --no-filename '^/\* !include https://[^ ]+' sqlpage/*.css sqlpage/*.js sqlpage/*.svg \ + | sed 's#^/\* !include ##' + } | sort -u +) + +for url in "${urls[@]}"; do + file_name=$(printf '%s' "$url" | sed -E 's/[^[:alnum:].-]/_/g') + cache_file="$cache_dir/$file_name" + + if [ -s "$cache_file" ]; then + echo " - Cached: $url" + continue + fi + + echo " - Downloading: $url" + curl -fsSL "$url" -o "$cache_file" +done + +echo "Done. Offline caches are ready."