Skip to content

ci: add tag-driven prebuilt release pipeline - #286

Open
drzsdrtfg wants to merge 28 commits into
0xShug0:mainfrom
drzsdrtfg:main
Open

ci: add tag-driven prebuilt release pipeline#286
drzsdrtfg wants to merge 28 commits into
0xShug0:mainfrom
drzsdrtfg:main

Conversation

@drzsdrtfg

Copy link
Copy Markdown
Contributor

Summary

Adds the prebuilt release pipeline: every v* release now ships ready-to-run binaries attached to the GitHub Release. This is the full set of changes this fork adds over upstream 0xShug0/audio.cpp — 2 files.

Changes

File What it does
.github/workflows/release.yml Tag-driven release build + publish
docs/RELEASING.md Release / dry-run / verification docs

.github/workflows/release.yml

  • Triggers on a v* semver tag push, or manual workflow_dispatch with a publish checkbox (used for build-only dry runs). No release on every main push.
  • Builds audiocpp_cli, audiocpp_server, audiocpp_gguf with -DAUDIOCPP_DEPLOYMENT_BUILD=ON -DENGINE_ENABLE_LLAMAFILE=ON -DENGINE_ENABLE_CUDA_GRAPHS=ON.
  • Matrix (fail-fast off): macOS metal (arm64/x64), Ubuntu x64 cpu+vulkan, Windows x64 cpu+vulkan+cuda (12.4/13.3). linux-rocm is commented out (no AMD GPU runner).
  • Windows CUDA uses GGML_BACKEND_DL: thin shells + a single ggml-cuda.dll; the CUDA runtime ships once in a separate -cudart-...zip. CUDA archs are pinned all-real.
  • Assets: audio-<tag>-bin-windows-x64-<backend>.zip (+ -cudart-...zip); Linux/macOS as .tar.gz.
  • Release job: gh release upload to an existing release (--clobber) or gh release create on a new tag (--generate-notes).

docs/RELEASING.md

UI-only steps to draft a release, tag, dry-run from the Actions tab, plus the artifact table and the GPU-runtime verification note.

Validation

The prebuilt binaries were downloaded and run to confirm they work out of the box.

Hardware:

  • GPU: Radeon RX Vega 56 (Vulkan device: "Radeon RX Vega"; fp16:1, bf16:0, int dot:0, matrix cores:none, warp:64, 32 KB smem), 8 GB VRAM
  • CPU: Intel Core i5-10400 (6c/12t), Windows, AMD proprietary driver

Config: audiocpp_cli --task tts --family supertonic --model supertonic-3-f16.gguf --voice-id M1 --num-inference-steps 8 --seed 1234

Vulkan binary (Radeon RX Vega 56):

Sample Audio (s) Gen wall (s) RTF x real-time
Short 5.02 1.80 0.359 2.79x
Medium 27.26 1.70 0.062 16.06x
Long 76.09 5.08 0.067 14.97x

CPU binary (i5-10400):

Threads Audio (s) Gen wall (s) RTF x real-time
1 13.57 18.98 1.398 0.72x
4 27.28 10.67 0.391 2.56x
10 74.25 21.74 0.293 3.42x

These runs only confirm the shipped binaries enumerate the device and synthesize correctly; see the README for reference performance figures.

Notes

  • release.yml references macos-26 / macos-15-intel runner labels; adjust to this repo's runner pool if different.
  • ROCm is disabled by default (no AMD runner); enable via self-hosted HIP runners.
  • Optional follow-up: add a CI check job that runs the shipped Windows binaries.
  • No runtime/model changes; CI and docs only.
  • This PR's code and description were written and assisted by DeepSeek-V4-Flash-0731 through Cline.

…Vulkan SDK fix, OpenMP-off CUDA build) [no release]
…g-name, GGML_BACKEND_DL CUDA, robust cudart bundling)
@drzsdrtfg

Copy link
Copy Markdown
Contributor Author

btw I dont know whether the other binaries work pls test them out on my fork before you merge this

@0xShug0

0xShug0 commented Aug 20, 2026

Copy link
Copy Markdown
Owner

@drzsdrtfg Thank you for the PR! It may require some time to test...Stay tuned.

@drzsdrtfg

Copy link
Copy Markdown
Contributor Author

Ok. Just let me know when issues appear. @0xShug0

@0xShug0

0xShug0 commented Aug 22, 2026

Copy link
Copy Markdown
Owner

@drzsdrtfg Tested the Metal and Linux releases so far, and they work correctly. One thing I noticed during testing: The current prebuilts don’t pass the flags to the server to enable the native model manager (AUDIOCPP_BUILD_NATIVE_MODEL_MANAGER) , so the UI still relies on external Python. I also missed updating the build scripts to accept the new options. I’ve just pushed a fix.

Could you update the release scripts so the prebuilts include the self-contained native UI?

More about the new flags:
https://github.com/0xShug0/audio.cpp/blob/main/app/server/README.md

@drzsdrtfg

Copy link
Copy Markdown
Contributor Author

Ok, I will.

Add -DAUDIOCPP_BUILD_NATIVE_MODEL_MANAGER=ON to the CMAKE_ARGS so the
prebuilt binaries ship with the self-contained native UI (model downloads,
dynamic model management, etc.) instead of relying on external Python.

Addresses: 0xShug0#286 (comment)
The env.CMAKE_ARGS is consumed only by the Linux and macOS jobs which
call cmake directly. Windows CPU and Vulkan jobs use build_windows.ps1
which has its own CLI parameters (-DeploymentBuild, -NativeModelManager)
and ignores CMAKE_ARGS. Windows CUDA jobs also hardcode cmake flags.

This fix:
- Adds -DeploymentBuild -NativeModelManager to all build_windows.ps1 calls
- Adds -DAUDIOCPP_BUILD_NATIVE_MODEL_MANAGER=ON to the CUDA cmake command
Port the upstream fix (0xShug0/audio.cpp@e9e8f14) to the fork:
- Add --native-model-manager, --system-openssl, --boringssl-archive CLI flags
- Add -DAUDIOCPP_BUILD_NATIVE_MODEL_MANAGER to cmake invocations
- Print native model manager status in build output

This completes the owner's request: the release CI now builds the
self-contained native UI on all platforms.
@drzsdrtfg

Copy link
Copy Markdown
Contributor Author

@0xShug0 Should be done by now. Can you take a look?

@drzsdrtfg

Copy link
Copy Markdown
Contributor Author

Found some mistakes. Will fix them and come back.

drzsdrtfg and others added 2 commits August 24, 2026 01:32
The server's model installer invokes tools/model_manager_v2.py for
package downloads. Without it in the prebuilt zip, model download from
the WebUI fails with 'model preparation helper was not found'.

Include tools/ and model_specs/ at the archive root so the server
can resolve its repository_root (traverses upward from the exe).
@0xShug0

0xShug0 commented Aug 23, 2026

Copy link
Copy Markdown
Owner

@0xShug0 Should be done by now. Can you take a look?

Thanks! AFK tonight. I will check tomorrow.

…lease

- Build jobs now upload the unpacked bundle (binaries + tools/ +
  model_specs/) instead of a zip-wrapped-in-an-artifact, so downloading
  an Actions artifact yields a ready-to-run folder.
- CUDA jobs upload bin and cudart as two separate artifacts (the old
  wildcard path merged both into one ~1 GB blob).
- The release job downloads per-artifact folders, creates the final
  zip/tar.gz archives there, and uploads those to the Release -- asset
  layout stays identical to v0.6.0.
@drzsdrtfg

Copy link
Copy Markdown
Contributor Author

You can test it now.

@0xShug0

0xShug0 commented Aug 25, 2026

Copy link
Copy Markdown
Owner

@drzsdrtfg The prebuilts work correctly on Linux, Metal, and Windows based on my tests. My concern is that the Windows CPU/CUDA/Vulkan staged artifacts do not include MSVC/OpenMP runtime DLLs such as vcomp140.dll, vcruntime140.dll, and msvcp140.dll. They pass validation on my machine because those DLLs already exist globally in C:\Windows\System32 / other installed toolchain paths.

Should the Windows prebuilts include those DLLs as well?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants