Files
rustingface/.gitea/workflows/conformance.yml
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

31 lines
955 B
YAML

name: conformance
on:
workflow_dispatch:
schedule:
# Weekly. The clients are pinned, so this catches upstream Hub changes
# rather than client upgrades; a client upgrade is a deliberate commit and
# a spec-review trigger.
- cron: "0 4 * * 1"
jobs:
conformance:
runs-on: rust
steps:
- uses: actions/checkout@v4
- name: build
run: cargo build --release --bin rustingface
- name: install pinned clients
run: |
python3 -m venv .venv
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -r test/conformance/requirements.txt
# Runs against a directory rather than a bucket. The S3 path is covered
# by the `doctor` step of the deploy workflow, which exercises the real
# MinIO on caveman with the real credentials.
- name: conformance
run: .venv/bin/python test/conformance/conformance.py --binary target/release/rustingface