RELEASING
Releasing ONNX::Native
Two release cadences run independently:
Binary release ā bumps
BINARY_TAG, triggers.github/workflows/build-binaries.ymlto publish per-platform tarballs to GitHub Releases. Drives the prebuilt-download path inBuild.rakumod.Raku dist release ā bumps the version in
META6.json/dist.ini, runsmi6 release(which updatesChanges, tags, publishes to Zef). Pure-Raku changes that don't touch the shim only need this one.
The two are decoupled because most Raku-side changes don't need a fresh shim build, but every shim change requires both.
Binary release
Bump
BINARY_TAGto a new revision: edit bothBINARY_TAG(root) andresources/BINARY_TAG. Format:binaries-onnxruntime-<ver>-r<n>. Incrementr<n>for any shim source change; bump<ver>only when moving to a new ORT version (also updateORT_VERSIONin.github/workflows/build-binaries.ymland$MIN-GLIBCinBuild.rakumodif the new ORT raises the floor).Manual GPU smoke (see below) on at least one Linux NVIDIA box and one Windows NVIDIA box. CI builds the GPU bundles but doesn't test them ā there are no free GPU runners.
Trigger the build via Actions ā
build-binariesā "Run workflow" (orgh workflow run build-binaries.yml). The workflow's release step readsBINARY_TAGfrom the repo and creates / updates the matching GitHub Release with all per-platform artefacts attached. Tag-push (binaries-*) also works as a trigger but isn't required ā manual dispatch is the established path here.Paste the new checksums: download
checksums.txtfrom the Release, replaceresources/checksums.txt's body (keep the header comments intact). Commit.Bump Raku dist version (
META6.json/dist.ini) so the nextzef install ONNX::Nativepulls the right tag.
Raku-only release
Make changes; run
prove6 t/.Bump version in
META6.json+dist.ini.mi6 release(handlesChanges+ tag + publish).
Manual GPU smoke checklist
CI verifies the GPU bundles compile + link, but never runs them. Before any binary release that touches the shim or the build path, do this on real hardware:
Linux NVIDIA
ONNX_NATIVE_WITH_CUDA=1 zef install . --force-install
ONNX_NATIVE_TEST_GPU=1 prove6 -Ilib xt/05-gpu-smoke.rakutestExpected: all subtests pass. The CUDA-provider register call
should produce no warnings about missing libs (would indicate a
broken libcudnn / libcublas resolve at @rpath).
If you have a multi-GPU box (your A100 cluster), edit the
:cuda-device-id test to point at a non-zero device for
additional coverage.
Windows NVIDIA
$env:ONNX_NATIVE_WITH_CUDA="1"
zef install . --force-install
$env:ONNX_NATIVE_TEST_GPU="1"
prove6 -Ilib xt/05-gpu-smoke.rakutestExpected: same. Common failure mode is cudnn64_9.dll not
being found ā Windows DLL search rules can hijack a different
cudnn version installed elsewhere on PATH. Verify the staged
dir's cudnn64_9.dll is the one being loaded
(Process Hacker / dumpbin /dependents of the running
raku.exe).
Negative coverage
After the GPU smoke passes, do one CPU-only run with
ONNX_NATIVE_WITH_CUDA UNSET to confirm the existing CPU path
still works on the same machine:
unset ONNX_NATIVE_WITH_CUDA
zef install . --force-install
prove6 -Ilib t/This catches the case where a GPU-staging change accidentally
broke CPU staging. The two are siblings under
$XDG_DATA_HOME/ONNX-Native/; reinstalling without the env var
should pick up the CPU bundle and stage it cleanly alongside any
existing GPU bundle (or sweep it via cleanup-old-stages if
ONNX_NATIVE_KEEP_OLD_STAGES isn't set).