fix: survive short network outages when downloading (#2953)

* fix: use exponential backoff when a download fails

The retry used a flat 3 second wait over 3 attempts, which covers only
about 6 seconds of downtime. A CI runner lost DNS for approximately a
minute and the PyPy download failed. Wait 3, 6, 12, 24, then 48 seconds
over 6 attempts.

Assisted-by: ClaudeCode:claude-opus-5

* ci: raise the uv HTTP retry count

uv stops after 3 retries, which was too few when a runner lost DNS for
approximately a minute during a test run.

Assisted-by: ClaudeCode:claude-opus-5

* fix: do not retry a download after a client error

A bad URL will not fix itself, and the longer backoff made the wait
before the report about 93 seconds. Report 4xx responses at once, and
keep retrying 5xx.

Assisted-by: ClaudeCode:claude-opus-5
This commit is contained in:
Henry Schreiner
2026-08-02 07:01:14 +02:00
committed by GitHub
parent f05f72d4c1
commit b2533d3833
3 changed files with 150 additions and 2 deletions
+4
View File
@@ -34,6 +34,10 @@ concurrency:
group: test-${{ github.ref }}
cancel-in-progress: true
env:
# runners see short DNS/network outages; uv's default of 3 retries is too few
UV_HTTP_RETRIES: "6"
jobs:
lint:
name: Linters (mypy, ruff, etc.)