Actions logs API: server aborts /runs/{id}/logs download at ~30 s for large run zips #193877
Replies: 1 comment 1 reply
-
|
💬 Your Product Feedback Has Been Submitted 🎉 Thank you for taking the time to share your insights with us! Your feedback is invaluable as we build a better GitHub experience for all our users. Here's what you can expect moving forward ⏩
Where to look to see what's shipping 👀
What you can do in the meantime 💻
As a member of the GitHub community, your participation is essential. While we can't promise that every suggestion will be implemented, we want to emphasize that your feedback is instrumental in guiding our decisions and priorities. Thank you once again for your contribution to making GitHub even better! We're grateful for your ongoing support and collaboration in shaping the future of our platform. ⭐ |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
🏷️ Discussion Type
Bug
💬 Feature/Topic Area
Other
Discussion Details
Pre-history:
Our https://github.com/con/tinuous/ started to fail to download our https://github.com/dandi/dandi-cli CI logs a few days. Very consistently failing but varying in how much it reported "not fetched":
enhancing logging gave larger picture that it was some tail of the file and the file was zip:
a number of direct curl attempts ended with 30 second cut off marks:
here is claude produced summary to report, which I reviewed and even "Ask" section made sense to me:
Summary
GET /repos/{owner}/{repo}/actions/runs/{run_id}/logsaborts mid-stream at a~30 second wall-clock cutoff when the run-logs zip is large, making the full
zip unretrievable from networks that can't transfer it within that budget.
The cutoff is server-side and independent of HTTP version.
Reproducer
Repo: dandi/dandi-cli (public)
Run: 24899963531
Endpoint: GET /repos/dandi/dandi-cli/actions/runs/24899963531/logs
100% reproducible from a Dartmouth host (129.170.233.10). Earlier runs of
the same workflow downloaded successfully.
Evidence — same 30 s cutoff, two protocols, two failure modes
HTTP/2: server sends
RST_STREAM(CANCEL, err 8)after ~30 s.HTTP/1.1 (
--http1.1): server closes connection with body still pending.Both attempts terminate at ~30.0 s
time_total. The HTTP/1.1 attempt got~3× more bytes simply because the stream ran faster, which rules out a byte
limit and points to a wall-clock budget on the response generation.
Mitigations attempted (none viable)
Range: bytes=0-52428799request: server returns200 OK(not206),no
Content-Range, noAccept-Ranges— Range header is ignored, so arange-based client mitigation cannot work on this endpoint.
/repos/.../actions/jobs/{job_id}/logsdoes work(smaller payloads finish in <30 s), but it is not a substitute for the
run-level zip API which is documented as the canonical bulk-fetch path.
x-github-request-id values from failed attempts
Ask
Rangeso clientscan chunk; otherwise the endpoint is unusable for any sufficiently large
run from any sufficiently slow network path.
unreachable for affected clients.
Environment
--http1.1*.github.comcert validBeta Was this translation helpful? Give feedback.
All reactions