From afa900f89ca890092c21f6c1e06a7262d2fbf3f7 Mon Sep 17 00:00:00 2001 From: Blair Hamilton Date: Tue, 4 Aug 2026 21:30:42 -0400 Subject: [PATCH] fix(action): retry transport errors when downloading the release archive MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The install step fetched the release archive with `curl -fsSL --retry 3`, which only retries transient *HTTP* responses (5xx, 408, 429) and timeouts. A connection reset mid-transfer is a transport-level error, so curl exited 35 immediately without ever using its retry budget: curl: (35) Recv failure: Connection reset by peer ##[error]Process completed with exit code 35. That took down an otherwise-green CI run on a consumer's default branch — nothing was wrong with the repo or its hooks, and a plain re-run went green with no change. Since this step is pure infrastructure (fetch a tarball, verify its checksum), an intermittent network fault should cost a retry, not a red check. `--retry-all-errors` (curl 7.71+, runners ship 8.x) extends the retry budget to transport failures, which is the class we actually hit. Retries go 3 -> 5; curl's backoff doubles from 1s, so the worst case adds ~31s per download before failing for real, and the checksum verification below is unchanged — a truncated or corrupt download still fails loudly rather than being retried into a false pass. --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 1798df6..2dcc876 100644 --- a/action.yml +++ b/action.yml @@ -71,8 +71,8 @@ runs: mkdir -p "$dir" cd "$dir" - curl -fsSL --retry 3 -O "${base}/${archive}" - curl -fsSL --retry 3 -O "${base}/checksums.txt" + curl -fsSL --retry 5 --retry-all-errors -O "${base}/${archive}" + curl -fsSL --retry 5 --retry-all-errors -O "${base}/checksums.txt" if command -v sha256sum >/dev/null 2>&1; then grep " ${archive}\$" checksums.txt | sha256sum -c - else