Add HEAD route for remotes matching GET headers
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful

This commit is contained in:
2026-10-17 12:40:33 +11:00
parent bc68eb75fc
commit 3dd4acd233
5 changed files with 173 additions and 26 deletions
+1 -1
View File
@@ -353,7 +353,7 @@ func (e *Engine) headUpstreamOnce(ctx context.Context, remote models.Remote, pat
req.Header.Set(k, v)
}
}
return http.DefaultClient.Do(req)
return clientForRemote(remote).Do(req)
}
resp, err := doHead(nil)
+14
View File
@@ -216,6 +216,20 @@ func TestHead(t *testing.T) {
}
}
func TestHeadUpstreamUsesRemoteTimeout(t *testing.T) {
slow := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
time.Sleep(3 * time.Second)
}))
defer slow.Close()
r := models.Remote{Name: "slow-head", PackageType: models.PackageGeneric, BaseURL: slow.URL, UpstreamResponseHeaderTimeout: 1}
start := time.Now()
_, err := (&Engine{}).headUpstreamOnce(context.Background(), r, "blob.bin", prov(t, models.PackageGeneric))
if err == nil || time.Since(start) > 2*time.Second {
t.Fatalf("HEAD ignored the remote's response header timeout: err=%v after %s", err, time.Since(start))
}
}
func TestStaleOnError(t *testing.T) {
requireStack(t)
ctx := context.Background()