Files
rustingface/Cargo.toml
rob thijssen cb1ca8b6af
Some checks failed
deploy / build (push) Waiting to run
deploy / deploy (push) Has been cancelled
feat(rustingface): implement the registry, admin CLI and deployment
Scaffolds the workspace per architecture/generic.md §1 and implements
phases 0-3 of doc/spec.md §12.

Crates:
  entities  manifest/ref/repo schemas, bucket key layout, config, the
            X-Error-Code taxonomy. No I/O.
  core      resolver, freeze pinning, single-flight, the streaming tee,
            policy, gc/verify/refresh. Defines the Store and Upstream
            ports.
  data      object_store (S3 + local) and reqwest Hub adapters.
  api       the axum surface: resolve, model/dataset info, tree, refs,
            whoami, metrics, bearer auth, range handling.
  bin       one binary: serve plus fetch/pin/refresh/list/show/rm/gc/
            verify/doctor.

Deployment targets bob.hanzalova.internal:20482 (port derived per
architecture/port-allocations.md §3), storing to the MinIO on
caveman.kosherinata.internal, fronted by hanzalova at rf.internal.
Ships the sysusers drop-in, hardened unit, firewalld service, nginx
vhost, config template, infra-setup.sh and the Gitea Actions
ci/deploy/conformance workflows.

Testing: 112 unit and integration tests, including the sovereignty
suite (cold fetch, sealed replay, single-flight, client disconnect,
range resume, freeze stability, gc-after-rm, digest mismatch), plus a
conformance suite driving a pinned huggingface_hub against a real Hub.

Deviations from the spec, all deliberate:
  - one binary with subcommands (spec §9) rather than generic.md's
    separate -api and -cli binaries; the library split is unchanged.
  - a dedicated sysusers account and hardened unit (generic.md §8)
    rather than the spec's illustrative DynamicUser unit.
  - manifests carry an optional repo_tree recorded verbatim, resolving
    spec §13's "record whole, filter on read" question for the tree
    endpoint as well as model-info.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XZG2i4AmfSqE97EJGBVb64
2026-08-31 10:46:25 +03:00

55 lines
2.5 KiB
TOML

[workspace]
resolver = "3"
members = ["crates/*"]
[workspace.package]
version = "0.1.0"
edition = "2024"
rust-version = "1.85"
license = "GPL-3.0-or-later"
authors = ["Rob Thijssen <rthijssen@gmail.com>"]
repository = "https://git.lair.cafe/grenade/rustingface"
[workspace.dependencies]
rustingface-entities = { path = "crates/rustingface-entities", version = "=0.1.0" }
rustingface-core = { path = "crates/rustingface-core", version = "=0.1.0" }
rustingface-data = { path = "crates/rustingface-data", version = "=0.1.0" }
rustingface-api = { path = "crates/rustingface-api", version = "=0.1.0" }
anyhow = "1"
async-trait = "0.1"
axum = { version = "0.8", default-features = false, features = ["http1", "http2", "json", "tokio", "query", "matched-path"] }
bytes = "1"
clap = { version = "4", features = ["derive", "env"] }
dashmap = "6"
figment = { version = "0.10", features = ["toml", "env"] }
futures = "0.3"
globset = "0.4"
hex = "0.4"
http = "1"
http-body-util = "0.1"
humantime-serde = "1"
metrics = "0.24"
metrics-exporter-prometheus = { version = "0.18", default-features = false }
object_store = { version = "0.14", features = ["aws"] }
percent-encoding = "2"
reqwest = { version = "0.13", default-features = false, features = ["rustls", "rustls-native-certs", "stream", "http2", "charset", "json"] }
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1", features = ["preserve_order"] }
sha2 = "0.10"
subtle = "2"
thiserror = "2"
time = { version = "0.3", features = ["formatting", "parsing", "serde", "macros"] }
tokio = { version = "1", features = ["full"] }
tokio-util = { version = "0.7", features = ["io"] }
toml = "0.9"
tower = "0.5"
tower-http = { version = "0.7", features = ["trace", "normalize-path"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
[profile.release]
lto = "thin"
codegen-units = 1
strip = "symbols"