ci(smoke): fix state tier hang from bare wait on a lingering daemon

The state tier started actually running mpd in 74f0d33, which exposed a
deadlock in teardown: state.sh launches `mpd --no-daemon &` and never kills
it during the tier, and its cleanup() called smoke::stop *before* killing mpd.
smoke::stop ended in a bare `wait`, which reaps *every* background job of the
shell -- including the still-running mpd -- so it blocked until GitHub's 6h
job timeout. continue-on-error doesn't help: it catches failures, not hangs.

- lib.sh: smoke::stop now waits only on the PIDs it owns (waybar, compositor),
  so an unrelated daemon left running by a tier can't deadlock teardown.
- state.sh: cleanup() tears down mpd/pulseaudio before smoke::stop.
- smoke.yml: add timeout-minutes: 20 so a future hang fails fast instead of
  burning the default 6h runner budget.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alex
2026-07-05 23:00:33 +02:00
co-authored by Claude Opus 4.8
parent 74f0d3393a
commit a7b3a2c0db
3 changed files with 15 additions and 2 deletions
+3 -1
View File
@@ -20,9 +20,11 @@ MPD_PID=""
PA_STARTED=""
cleanup() {
smoke::stop
# Tear our daemons down first: smoke::stop waits on the compositor/waybar,
# and a still-running mpd/pulseaudio must not be left for anything to block on.
[ -n "$MPD_PID" ] && kill "$MPD_PID" 2>/dev/null || true
[ -n "$PA_STARTED" ] && pulseaudio --kill 2>/dev/null || true
smoke::stop
return 0
}