OXYGENHUB
# cea2e2f860c5 oxygen / packaging / haikuports history
..
dev-vcs …
make-recipe.py …
README.md …

oxy and oh on HaikuDepot

haikuports recipes for oxy (dev-vcs/oxy) and OxygenHub's oh (dev-vcs/oh) are written by make-recipe.py from a release's source tarball (oxygen#156, #157).

Each release's dist job attaches NAME-VERSION-src.tar.gz: the source as released, reproducible (sorted, fixed times and owners, gzip without a timestamp). oh's holds the oxygenhub tree with its subrepos inside, so it builds alone. The recipe fetches it from the release's stable address, https://oxygenhub.io/andymccall/REPO/releases/download/vVERSION/NAME-VERSION-src.tar.gz, and every crates.io crate in its Cargo.lock as a source of its own with its checksum, building offline as haikuports' other Rust recipes (ripgrep) do.

For a release (oxy shown; oh is the same with oh and oxygenhub):

curl -LO https://oxygenhub.io/andymccall/oxygen/releases/download/vX.Y.Z/oxy-X.Y.Z-src.tar.gz
python3 packaging/haikuports/make-recipe.py oxy oxy-X.Y.Z-src.tar.gz X.Y.Z > oxy-X.Y.Z.recipe

Test it on Haiku R1/beta6 with haikuports checked out and haikuporter installed: copy the recipe to haikuports/dev-vcs/oxy/ and run haikuporter --no-source-packages -j1 -y oxy. Submit it as a pull request to haikuports (oxy: new recipe, then oxy: bump to X.Y.Z).

Haiku needs the system's zstd (ZSTD_SYS_USE_PKG_CONFIG=1: the bundled zstd's hidden symbols break the link), which the recipe sets. oh's tests pull in the hub, whose pipeline parser needs a newer Rust than HaikuPorts' 1.94, so its recipe tests hub-api only.