radicle-heartwood-lfs/NOTES-package-publish-todo.md

4.4 KiB
Raw Permalink Blame History

Status: 10MB IPFS cat fix — code done and pushed; package build/publish still needs your input

Done (verified, no further action needed)

  • Root-caused and fixed the bug: crates/radicle-cli/src/ipfs.rs's cat() used ureq's Body::read_to_vec(), which silently caps reads at 10MB (a default meant for typical JSON API responses, not LFS content). Any LFS object over 10MB failed with "the response body is larger than request limit: 10485760" — this is exactly what broke blog-deploy.service on the VPS today, on assets/posts/hashcash/thumbnail.xcf (29MB).
  • Fix: raised the limit to 1GiB via ureq's .with_config().limit(...). Commit 35f1f972, branch rad-lfs-ipfs.
  • Verification performed:
    1. Added a #[cfg(test)] regression test (ipfs::tests::cat_round_trips_content_larger_than_ureqs_default_10mb_limit, #[ignore]d since it needs a live Kubo daemon) — a 15MB add+cat round-trip.
    2. Confirmed it fails with the exact production error when the fix is reverted, and passes with the fix in place.
    3. Ran the full radicle-cli test suite (123 tests) — one pre-existing, unrelated failure (rad_help, a stale --help-output snapshot missing the lfs subcommand — confirmed to fail identically on the unmodified base commit, nothing to do with this change).
    4. cargo clippy clean (one pre-existing warning in an unrelated file/crate).
    5. Live reproduction against the real file: moved aside the cached LFS blob for thumbnail.xcf in ~/Blog/Blog, ran rad lfs fetch with the old installed binary — reproduced the identical production error byte-for-byte. Ran it again with the newly built binary — the 10MB error is completely gone; it now correctly proceeds to the next step (prompting for a passphrase to decrypt the private-repo content, which is expected behavior and unrelated to this bug — I did not attempt to supply a passphrase). Restored the blog repo's .git/lfs/objects cache back to its original state afterward; no changes left in ~/Blog/Blog.
  • Pushed to origin (the Forgejo remote, ssh://git.hswro.org:9022/mab122/radicle-heartwood-lfs.git), branch rad-lfs-ipfs, commit 35f1f972..4ae9756a.

Not done — needs your call

I did not build or publish a package. Stopping here rather than guessing, because:

  1. No existing Forgejo-package publishing path in this repo. There's a build/Dockerfile that cross-compiles reproducible .tar.xz releases (4 targets: linux/macOS × x86_64/aarch64) via cargo-zigbuild, but nothing that uploads anywhere — no CI workflow, no curl-to-package-registry script, nothing referencing Forgejo's package API. I don't know what package type you want registered (generic package? a distro-specific one?), what name/version scheme you use there, or the auth (token?) needed to publish to git.hswro.org's package registry. I deliberately did not go hunting through credential stores (~/.netrc, etc.) to find one myself — that's exactly the kind of thing I should ask about rather than dig for.
  2. The existing Dockerfile's package doesn't include rad-lfs-transfer — only rad, git-remote-rad, and radicle-node get copied into the release tarball. rad-lfs-transfer is a separate crate/binary (radicle-lfs-transfer/) and is required for this fork's whole LFS-over-IPFS feature to work on a fresh install — worth fixing in the Dockerfile too, but I didn't want to change the packaging script's scope without confirming that's wanted.
  3. Platform scope is unclear. The existing Dockerfile builds all 4 targets (needed for a real public release); the VPS only needs x86_64-unknown-linux-musl. Building all 4 takes meaningfully longer and needs the macOS SDK blob (build/macos-sdk-11.3.tar.xz) and Zig cross-toolchain set up — I can do it, but wanted to confirm whether you want the full release matrix or just what's needed to update the VPS.

If you want me to keep going on this (rather than picking it up in the session that already knows this fork's packaging conventions), I'd need: the Forgejo package type/target and an auth token (however you'd like to provide it — e.g. via an env var you set, not me searching for it), confirmation on whether to add rad-lfs-transfer to the Dockerfile's package list, and whether to build the full 4-target matrix or just linux/x86_64.