Add HEAD route for remotes and gems remote type (#148)

Remotes answer only GET, so HEAD probes get 405, and there is no RubyGems remote. Synthesized (github_*) and rewritten (npm, helm, pypi, puppet, terraform, nuget) mutable responses need the GET path for HEAD lengths to match.

- add a HEAD route for /api/v1/remote/{name}/*; rewritten and synthesized mutable HEADs go through the GET path
- mark rewriting providers with a ResponseRewriter capability; set Content-Length on proxied GETs
- use the remote's upstream client for upstream HEAD
- add a gems remote type: compact index and specs mutable, .gem and gemspec immutable
- add gems docs, UI snippet and e2e caching case; add HEAD-vs-GET e2e checks

Reviewed-on: #148
Co-authored-by: unkin-agent <unkin-agent@unkin.net>
Co-committed-by: unkin-agent <unkin-agent@unkin.net>
This commit was merged in pull request #148.
This commit is contained in:
2026-10-17 21:23:29 +11:00
committed by BenVincent
parent 42998a80f4
commit ad72c3d630
21 changed files with 452 additions and 27 deletions
+5
View File
@@ -0,0 +1,5 @@
package models
const PackageGems PackageType = "gems"
func init() { registerPackageType(PackageGems) }