# oxy and oh on HaikuDepot [haikuports](https://github.com/haikuports/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`): ```sh 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.