Ported from audio.cpp
c79e588("ci: add tag-driven prebuilt release pipeline", #286) and rebranded for this fork: release artifacts are namedspeech-<tag>-...rather thanaudio-<tag>-.... The build targets (audiocpp_cli/audiocpp_server/audiocpp_gguf) and thewindows-*-releasepresets inscripts/build_windows.ps1are unchanged, so the pipeline runs against this tree as-is.
Everything is driven from the GitHub UI — no command line needed. Releases
are semantic-version and tag-driven: there is no auto-release on pushes to
main. You release by tagging a version; the built binaries are then attached
to that version's Release.
- Open the repository → Releases → Draft a new release.
- Choose a tag → create a new
v*tag, e.g.v1.2.0(orv1.2.0-rc1). - Add a title/notes; check "Set as a pre-release" if it's a candidate.
- Publish release.
Publishing pushes the tag, which starts the build. When it finishes (~1–2 h; the Windows CUDA jobs dominate), the prebuilt binaries are attached to that Release.
- Actions tab → Release → Run workflow.
- Version: enter
1.2.0(orv1.2.0). - Leave the Publish a GitHub Release box unchecked.
- Run workflow → builds all backends and uploads them as workflow artifacts, but creates no tag or Release. Use this to validate before cutting a release.
| Platform | Backend | Artifact |
|---|---|---|
| Windows x64 | CUDA 12.4 | ...-bin-windows-x64-cuda12.4.zip (+ cudart-...-cuda12.4.zip) |
| Windows x64 | CUDA 13.3 | ...-bin-windows-x64-cuda13.3.zip (+ cudart-...-cuda13.3.zip) |
| Windows x64 | Vulkan | ...-bin-windows-x64-vulkan.zip |
| Windows x64 | CPU | ...-bin-windows-x64-cpu.zip |
| Ubuntu x64 | Vulkan/CPU | ...-bin-ubuntu-x64-vulkan.tar.gz / ...-cpu.tar.gz |
| macOS arm64/x64 | Metal | ...-bin-macos-<arch>-metal.tar.gz |
Notes:
- CUDA builds use
GGML_BACKEND_DL, so CUDA kernels ship once asggml-cuda.dll; the heavy CUDA runtime (cudart/cuBLAS/cuBLASLt/cuFFT) is bundled in a separatecudart-...zip. - CUDA architectures are pinned (all-real) so binaries are portable across the supported NVIDIA GPUs instead of being tied to the (GPU-less) CI host.
- Windows packages bundle the MSVC runtime app-locally (
vcruntime140*.dll,msvcp140*.dll,vcomp140.dll) so they run on clean Windows without a separately installed VC++ Redistributable. Total added size is ~1 MB compressed (negligible vs. the CPU/Vulkan/CUDA package sizes).
- Pushing a
v*tag (e.g. by drafting + Publishing a Release) → builds and attaches the binaries to that tag's Release. - Manual run from the Actions UI (with a version) → builds; publishes only if Publish is checked.
mainpushes do not trigger a release.
- Confirm the expected assets exist on the Release page.
- On a real NVIDIA GPU machine, run e.g.
audiocpp_cli.exe --backend cuda ...(thespeech_cli/speechcpp_cliCMake ALIAS targets build the same binary) and confirm the log reports a CUDA device (ggml_cuda_init/ "found N CUDA devices"). GitHub CI runners have no GPU, so a green build does not prove GPU runtime attach — this check is required.