The update client set http.Client.Timeout to 30s, which is an overall
deadline covering the entire request including the body download. On a
slow connection a large release asset (~12MB) cannot finish within 30s
even when data is flowing steadily, so the download aborts with
"context deadline exceeded".
Replace the overall timeout with a per-read idle timeout: a custom
transport wraps each connection and refreshes the read deadline before
every Read, so a transfer fails only when no data arrives for 30s
(a dropped connection). Slow-but-progressing downloads now succeed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Summary
roborev updateaborted withcontext deadline exceededpartway through downloading a release asset on slow connections.http.Client.Timeout = 30s, an overall deadline covering the entire request including the body download — a ~12MB asset can't finish within 30s on slow wifi even when data is flowing steadily.Read, so a transfer fails only when no data has arrived for 30s (a dropped connection). Slow-but-progressing downloads now succeed.dialTimeout,TLSHandshakeTimeout) so unreachable hosts still fail fast.