feat: Cargo sparse index (RFC 2789) + PyPI twine upload + PEP 691 (#113)

Cargo registry:
- Sparse index with config.json, prefix-based lookup (1/2/3/4+ char rules)
- cargo publish wire format (LE u32 lengths + JSON metadata + tarball)
- Version immutability with Cargo-compatible JSON error responses
- Dependency field mapping (version_req->req, explicit_name_in_toml->package)
- Case-insensitive crate name normalization across all endpoints
- Cache-Control headers on index (max-age=300) and downloads (immutable)

PyPI registry:
- twine upload via multipart/form-data with SHA-256 verification
- PEP 691 JSON API with Accept header content negotiation
- Hash fragment preservation in proxied links (PEP 503)
- Package name normalization per PEP 503

577 tests (up from 504), 0 failures, clippy clean.
This commit is contained in:
2026-04-08 09:38:18 +03:00
committed by GitHub
parent 25ba9f6cb5
commit 27a368b3a0
5 changed files with 1508 additions and 90 deletions

View File

@@ -6,7 +6,7 @@ members = [
]
[workspace.package]
version = "0.4.0"
version = "0.5.0"
edition = "2021"
rust-version = "1.75"
license = "MIT"
@@ -16,7 +16,7 @@ homepage = "https://getnora.io"
[workspace.dependencies]
tokio = { version = "1", features = ["full"] }
axum = "0.8"
axum = { version = "0.8", features = ["multipart"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tracing = "0.1"