mirror of
https://github.com/ruvnet/RuView.git
synced 2026-10-22 06:32:35 -05:00
nvsim-server -> ghcr.io was failing for three separate reasons, each one
masked by the previous. The Dockerfile carried two literals that had drifted
from their source of truth, and both workflows hard-coded the `ruvnet`
registry namespace that only the upstream can write to.
nvsim-server/Dockerfile
1. Stub workspace version. The Dockerfile builds a throwaway workspace
containing only nvsim and nvsim-server. That stub hard-coded
version = "0.3.0" (PR #440); the real workspace is now 0.3.1 (PR
#1439) and nvsim-server requires nvsim = { path = "../nvsim",
version = "0.3.1" }. The build died with "failed to select a version
for the requirement nvsim". The stub now extracts the version from
the real Cargo.toml and fails loudly if it cannot read one.
2. Builder toolchain. FROM was pinned to rust:1.81 while
rust-toolchain.toml declares channel = "1.89", so async-compression
0.4.42 and compression-codecs 0.4.38 (both MSRV 1.83, reached through
tower-http's compression-gzip feature) aborted the release build with
"rustc 1.81.0 is not supported". The builder is now 1.89.
Rather than re-pinning another literal that will drift again, the
declared channel travels into the build context and is compared
against the effective rustc before compiling. Bumping one without the
other now fails the build loudly instead of resurfacing as an MSRV
error three steps later. It is copied under a separate name on
purpose: letting rustup resolve it would silently download a
toolchain and hide the drift.
nvsim-server-docker.yml
The image name was hard-coded to ghcr.io/ruvnet/nvsim-server, so the push
failed with `denied: The requested installation does not exist` outside
the upstream namespace. It now derives from github.repository_owner,
which resolves to ruvnet for the upstream and to the fork owner for
every fork, so the workflow keeps working unchanged here.
The smoke test also pulled :sha-<short> but ran :latest. `latest` is
emitted with `enable={{is_default_branch}}`, so a tag build never had
it, and the `|| latest` fallback masked a failed push by testing a stale
image. It now pulls and runs the sha tag, which type=sha emits on every
event.
sensing-server-docker.yml
Same namespace problem: the image was fixed to ruvnet/wifi-densepose on
both Docker Hub and ghcr.io, which a fork cannot push to. Publishing
under github.repository_owner fixes that.
docker login was also unconditional, so a repository without
DOCKERHUB_USERNAME/DOCKERHUB_TOKEN died at "Must provide --username with
--password-stdin" before building anything. ghcr.io needs no secret, so
it stays the always-on target and Docker Hub is added only when both
credentials are present.
Verified: cargo check -p nvsim-server --release under rustc 1.89.0
compiles nvsim v0.3.1, nvsim-server v0.3.1 and async-compression 0.4.42;
the resulting image builds, pushes and its /api/health reports
{"nvsim_version":"0.3.1"}. CI on this branch runs the full pipeline
green.