Skip to content

Commit 9a2bd59

Browse files
committed
ci: build the Nix packages, including the CUDA link
The Nix packages had no CI coverage at all, which is how three Linux packaging bugs shipped in a row: missing pkg-config/alsa-lib, an ALSA client too old for the host PipeWire, and a CUDA build that compiled every .cu kernel and then failed the final link on -lcuda. All three are BUILD failures, so a runner catches them; none needs a GPU, a microphone or a Wayland session. The nix job also asserts the Wayland delivery tools really are on the wrapped binary's PATH, since a package that transcribes and then cannot type is the failure mode that looks like a bug in the app. nix-cuda is a separate job: nvcc plus the CUDA redistributables are minutes of compute and gigabytes of download, and it needs the runner's disk reclaimed. It proves the link, not inference.
1 parent 150a54b commit 9a2bd59

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,3 +407,62 @@ jobs:
407407
if: failure()
408408
run: >-
409409
echo "::error title=install job failed::scripts/install.sh could not install the published release, or the app it installed was not the outloud daemon with its speech helper. Run scripts/test-install.sh locally; it installs into a temp dir and never touches /Applications."
410+
411+
# The Nix packages had no coverage at all, which is how three separate
412+
# Linux packaging bugs shipped in a row: a missing pkg-config/alsa-lib, an
413+
# ALSA client too old for the host PipeWire, and a CUDA build that compiled
414+
# every .cu kernel and then failed the final link on -lcuda. Every one of
415+
# those is a BUILD failure, so a runner can catch them; none needs a GPU,
416+
# a microphone or a Wayland session.
417+
nix:
418+
runs-on: ubuntu-24.04
419+
steps:
420+
- uses: actions/checkout@v4
421+
- uses: DeterminateSystems/nix-installer-action@v16
422+
# The default package: proves the workspace builds under Nix on Linux
423+
# and that the wtype/wl-clipboard wrapper resolves.
424+
- name: Build the default package
425+
run: nix build .#default --print-build-logs
426+
- name: The wrapper must put wtype and wl-copy on the binary's PATH
427+
run: |
428+
# wrapProgram replaces bin/outloud with a shell wrapper and moves
429+
# the real ELF aside; asserting on the whole bin/ directory instead
430+
# of a specific filename keeps this from breaking when nixpkgs
431+
# changes the wrapper's naming. Grep, never execute: running the
432+
# binary would want a Wayland session and a microphone.
433+
set -euo pipefail
434+
if ! grep -rqs wtype result/bin/; then
435+
echo "::error::wtype is not on the wrapped binary's PATH"
436+
ls -la result/bin/
437+
exit 1
438+
fi
439+
if ! grep -rqs wl-clipboard result/bin/; then
440+
echo "::error::wl-clipboard is not on the wrapped binary's PATH"
441+
exit 1
442+
fi
443+
echo "wtype and wl-clipboard are both on the wrapped PATH"
444+
- name: Attribute failure
445+
if: failure()
446+
run: >-
447+
echo "::error title=nix job failed::The Nix package failed to build on x86_64 Linux, or the Wayland delivery tools are missing from the wrapped binary's PATH."
448+
449+
# CUDA is split out and allowed to fail the slow way: it compiles
450+
# whisper.cpp's CUDA kernels with nvcc, which is minutes of work and a
451+
# multi-gigabyte toolchain download. It proves the LINK, which is where
452+
# this has broken before (libcuda is a driver stub, not part of the
453+
# redistributable toolkit); it cannot prove inference, which needs a real
454+
# GPU this runner does not have.
455+
nix-cuda:
456+
runs-on: ubuntu-24.04
457+
timeout-minutes: 90
458+
steps:
459+
- uses: actions/checkout@v4
460+
# nvcc plus the CUDA redistributables far exceed the runner's ~14 GB.
461+
- uses: wimpysworld/nothing-but-nix@main
462+
- uses: DeterminateSystems/nix-installer-action@v16
463+
- name: Build the CUDA package (compile + link only; no GPU here)
464+
run: nix build .#outloud-cuda --print-build-logs
465+
- name: Attribute failure
466+
if: failure()
467+
run: >-
468+
echo "::error title=nix-cuda job failed::whisper.cpp's CUDA build or its final link failed. If the error is 'unable to find library -lcuda', the libcuda stub path in flake.nix is wrong: libcuda ships with the driver, and Nix links against cuda_cudart's stubs directory."

0 commit comments

Comments
 (0)