From 1957f1d202c0fdabd28bfc107b9f7f673d631ce4 Mon Sep 17 00:00:00 2001 From: Florian Ruppel Date: Mon, 20 Jul 2026 13:17:12 +0200 Subject: [PATCH] Retry dependency clones with HTTP/1.1 and verbose transfer log The partial-clone change (#181) did not resolve the intermittent 'Failed sending HTTP request' errors when cloning SwagCommercial: the failures occur within ~60ms, before any pack data is transferred, so transfer volume was not the bottleneck. curl error 55 at that stage is a typical symptom of an HTTP/2 stream reset while the request body is being sent. SwagCommercial's fetch negotiation request is ~15x larger than that of other dependencies (3707 refs vs ~250), which matches it being the only repo affected. None of the involved actions changed when the failures started (2026-07-18), pointing at a runner-image or transport-level change. Retry attempts now force http.version=HTTP/1.1 and enable GIT_CURL_VERBOSE (auth headers are redacted by git). If retries succeed consistently while first attempts keep failing, HTTP/2 is confirmed as the trigger and can be disabled for the first attempt as well; if they keep failing, the verbose log shows where the connection breaks. --- setup-extension/action.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/setup-extension/action.yml b/setup-extension/action.yml index a2624c3..8464e60 100644 --- a/setup-extension/action.yml +++ b/setup-extension/action.yml @@ -238,9 +238,19 @@ runs: fi for attempt in 1 2 3; do + git_flags=() + if [ "${attempt}" -gt 1 ]; then + # 'Failed sending HTTP request' (curl error 55) is a typical symptom of an + # HTTP/2 stream reset while the request body is being sent. Retry attempts + # force HTTP/1.1 and log the transfer verbosely (auth headers are redacted + # by git) so we can pin down where the connection breaks. + git_flags+=(-c http.version=HTTP/1.1) + export GIT_CURL_VERBOSE=1 + fi # Partial clone (lazy blobs): full ref list for the .auto branch checkout below, # but skips historic blobs, which drastically reduces transfer size for large repos - if git clone --filter=blob:none "$dep_repo" "custom/plugins/$dep_name"; then + if git "${git_flags[@]}" clone --filter=blob:none "$dep_repo" "custom/plugins/$dep_name"; then + unset GIT_CURL_VERBOSE break fi rm -rf "custom/plugins/$dep_name" @@ -251,6 +261,7 @@ runs: echo "::warning::cloning ${dep_name} failed (attempt ${attempt}/3); retrying in $((attempt * 5))s" sleep "$((attempt * 5))" done + unset GIT_CURL_VERBOSE if [ -n "${dep_branch}" ]; then if [ "${dep_branch}" = ".auto" ]; then