From 72ca2b7e6e14fd9d89b69f21667d76b7ae74bace Mon Sep 17 00:00:00 2001 From: tcely Date: Mon, 14 Sep 2026 17:30:56 -0400 Subject: [PATCH] fix(scripts): make multiple attempts to download --- tubesync/download_gh_release.func.inc.sh | 2 +- tubesync/install_deno.sh | 39 ++++++++++++++----- tubesync/install_tailwindcss.sh | 49 ++++++++++++++++++++---- 3 files changed, 72 insertions(+), 18 deletions(-) diff --git a/tubesync/download_gh_release.func.inc.sh b/tubesync/download_gh_release.func.inc.sh index 59ebbd12..15e90bae 100755 --- a/tubesync/download_gh_release.func.inc.sh +++ b/tubesync/download_gh_release.func.inc.sh @@ -55,5 +55,5 @@ download_gh_release() { stdout "Fetching from ${owner}/${repo}: ${filename}" - curl --progress-bar --fail --location --remote-name --remote-time "${dl_url}" + curl --progress-bar --fail --location --remote-name --remote-time --retry 5 --retry-connrefused --retry-all-errors "${dl_url}" } diff --git a/tubesync/install_deno.sh b/tubesync/install_deno.sh index 8137eef8..31b79da3 100755 --- a/tubesync/install_deno.sh +++ b/tubesync/install_deno.sh @@ -17,18 +17,36 @@ download_deno() { local releases_url="https://github.com/${owner}/${repo}/releases" local url="${releases_url}/latest/download/${fn}" - test -n "${fn}" - rm -v -f "./${fn}"* # this should never do anything + [[ -n "${fn}" ]] - download_gh_release "${owner}" "${repo}" "${fn}" 'latest' + # this should never do anything + rm -v -f "./${fn}"* + + # fetch the much smaller manifest first + download_gh_release "${owner}" "${repo}" "${fn}.sha256sum" 'latest' local latest_version="${resolved_version}" - test -n "${latest_version}" + [[ -n "${latest_version}" ]] url="${releases_url}/download/${latest_version}/${fn}" - local latest_digest="$(./asfald-latest --get-hash "${url}")" - verify_digest "${latest_digest}" "${fn}" || return 1 - download_gh_release "${owner}" "${repo}" "${fn}.sha256sum" "${latest_version}" + local latest_digest='' manifest_digest='' _attempt _tmpdir="$(realpath .)" + for _attempt in {1..10}; do + if [[ -z "${latest_digest}" ]]; then + latest_digest="$(./asfald-latest --get-hash -- "${url}" || :)" + fi + if [[ -z "${manifest_digest}" ]]; then + manifest_digest="$(./asfald-latest --get-hash -- "${url}.sha256sum" || :)" + fi + if ! TMPDIR="${_tmpdir}" ./asfald-latest --verbose -- "${url}"; then + if ! TMPDIR="${_tmpdir}" ./asfald -o "${fn}" -w -p '${fullpath}.sha256sum' -- "${url}"; then + download_gh_release "${owner}" "${repo}" "${fn}" "${latest_version}" + fi + fi + if [[ -s "./${fn}" ]]; then break; else sleep "${_attempt}"; fi + done + + [[ -z "${manifest_digest}" ]] || verify_digest "${manifest_digest}" "${fn}.sha256sum" || return 1 + [[ -z "${latest_digest}" ]] || verify_digest "${latest_digest}" "${fn}" || return 1 "${HERE}/shasum.py" -a sha256 "./${fn}.sha256sum" } @@ -66,8 +84,11 @@ trap '_cleanup' EXIT cd "${work_dir}" if [ '--only-record-version' != "${1-unset}" ]; then - download_asfald - download_asfald latest + for _attempt in {1..5}; do + [[ -x ./asfald ]] || download_asfald + download_asfald latest && break + sleep "${_attempt}" + done; unset -v _attempt ; download_deno "${deno_archive}" extract_deno "${deno_archive}" '/usr/local/bin' diff --git a/tubesync/install_tailwindcss.sh b/tubesync/install_tailwindcss.sh index 24df622e..1ba1019e 100755 --- a/tubesync/install_tailwindcss.sh +++ b/tubesync/install_tailwindcss.sh @@ -46,13 +46,43 @@ download_tailwindcss() { ;; esac - TMPDIR="$(realpath .)" ./asfald -o 'tailwindcss' -p '${path}/sha256sums.txt' "https://github.com/${owner}/${repo}/releases/latest/download/${TW_BIN}" && \ + local fn="${TW_BIN}" + local releases_url="https://github.com/${owner}/${repo}/releases" + local url="${releases_url}/latest/download/${fn}" + + [[ -n "${fn}" ]] + + # this should never do anything + rm -v -f './sha256sums.txt' "./${fn}"* + + # fetch the much smaller manifest first + download_gh_release "${owner}" "${repo}" 'sha256sums.txt' 'latest' + local latest_version="${resolved_version}" + [[ -n "${latest_version}" ]] + + url="${releases_url}/download/${latest_version}/${fn}" + + local latest_digest='' manifest_digest='' _attempt _tmpdir="$(realpath .)" + for _attempt in {1..10}; do + if [[ -z "${latest_digest}" ]]; then + latest_digest="$(./asfald-latest --get-hash -- "${url}" || :)" + fi + if [[ -z "${manifest_digest}" ]]; then + manifest_digest="$(./asfald-latest --get-hash -- "${releases_url}/download/${latest_version}/sha256sums.txt" || :)" + fi + if ! TMPDIR="${_tmpdir}" ./asfald-latest --verbose -- "${url}"; then + if ! TMPDIR="${_tmpdir}" ./asfald -o "${fn}" -w -p '${path}/sha256sums.txt' -- "${url}"; then + download_gh_release "${owner}" "${repo}" "${fn}" "${latest_version}" + fi + fi + if [[ -s "./${fn}" ]]; then break; else sleep "${_attempt}"; fi + done + + [[ -z "${manifest_digest}" ]] || verify_digest "${manifest_digest}" 'sha256sums.txt' || return 1 + [[ -z "${latest_digest}" ]] || verify_digest "${latest_digest}" "${fn}" || return 1 + "${HERE}/shasum.py" -a sha256 './sha256sums.txt' && \ + mv -v "${fn}" tailwindcss && \ chmod -v a+rx tailwindcss - local latest_version="$(get_tailwindcss_version ./tailwindcss)" - test -n "${latest_version}" || return 1 - local url="https://github.com/${owner}/${repo}/releases/download/v${latest_version}/${TW_BIN}" - local latest_digest="$(./asfald-latest --get-hash "${url}")" - verify_digest "${latest_digest}" 'tailwindcss' || return 1 } get_tailwindcss_version() { @@ -84,8 +114,11 @@ _cleanup() { trap '_cleanup' EXIT cd "${work_dir}" -download_asfald -download_asfald latest +for _attempt in {1..5}; do + [[ -x ./asfald ]] || download_asfald + download_asfald latest && break + sleep "${_attempt}" +done; unset -v _attempt ; download_tailwindcss install -v -t "${dest_dir}" tailwindcss