Skip to content

Add timeout to bluetoothctl check to prevent CI hang#6

Merged
dolph merged 2 commits into
masterfrom
claude/investigate-ci-hang-EU1yC
May 12, 2026
Merged

Add timeout to bluetoothctl check to prevent CI hang#6
dolph merged 2 commits into
masterfrom
claude/investigate-ci-hang-EU1yC

Conversation

@dolph

@dolph dolph commented May 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • Wraps bluetoothctl list with timeout 5 so the CI desktop role on Fedora 43 can't hang indefinitely when bluez is installed but bluetoothd cannot start (no hardware in the container).
  • Switches ignore_errors: truefailed_when: false, which is necessary because ignore_errors only catches non-zero exits, not infinite blocking — and renders more cleanly in the playbook output.

desktop_bluetooth_devices.stdout will be empty on timeout, which the next task (Register bluetooth support) already treats as "no bluetooth support", so semantics are preserved.

Why

The desktop (Fedora 43) job has been hanging in CI (e.g. PR #4, PR #5). PR #5 removes the Signal flatpak install entirely and is still hanging, which means the hang is upstream of signal.yml in the desktop role. The most plausible candidate at that point in the task order is the bluetoothctl check, since bluez is installed in the dnf step just above it, D-Bus tries to activate bluetooth.service, and bluetoothctl list can block waiting for the daemon's D-Bus name to appear rather than failing fast. Behavior likely differs between F42's and F43's bluez/systemd combo.

Test plan

  • CI passes on desktop (Fedora 43) in a reasonable amount of time
  • CI still passes on desktop (Fedora 42)
  • CI still passes on headless (Fedora 42) and headless (Fedora 43)

https://claude.ai/code/session_01D7LfRWuFEbNFoLTLBkQhXQ


Generated by Claude Code

claude added 2 commits May 12, 2026 14:44
bluetoothctl list can block indefinitely waiting for a D-Bus name when
bluez is installed but bluetoothd cannot start (e.g. in containers).
ignore_errors only catches non-zero exits, not hangs. Wrap with
timeout(1) and switch to failed_when:false so the playbook moves on.

https://claude.ai/code/session_01D7LfRWuFEbNFoLTLBkQhXQ
ansible-lint's risky-shell-pipe rule exempts piped shells guarded by
ignore_errors:true. Switching to failed_when:false removed that
exemption, so add set -o pipefail like the other piped shell tasks in
this repo (nvidia.yml, i3.yml resolution checks).

https://claude.ai/code/session_01D7LfRWuFEbNFoLTLBkQhXQ
@dolph
dolph merged commit b236a73 into master May 12, 2026
8 of 9 checks passed
@dolph
dolph deleted the claude/investigate-ci-hang-EU1yC branch May 12, 2026 16:06
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