diff --git a/Cargo.lock b/Cargo.lock index efe80d4..ea2e670 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1642,7 +1642,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lesavka_client" -version = "0.13.16" +version = "0.13.17" dependencies = [ "anyhow", "async-stream", @@ -1676,7 +1676,7 @@ dependencies = [ [[package]] name = "lesavka_common" -version = "0.13.16" +version = "0.13.17" dependencies = [ "anyhow", "base64", @@ -1688,7 +1688,7 @@ dependencies = [ [[package]] name = "lesavka_server" -version = "0.13.16" +version = "0.13.17" dependencies = [ "anyhow", "base64", diff --git a/client/Cargo.toml b/client/Cargo.toml index eadad99..13b59a4 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -4,7 +4,7 @@ path = "src/main.rs" [package] name = "lesavka_client" -version = "0.13.16" +version = "0.13.17" edition = "2024" [dependencies] diff --git a/common/Cargo.toml b/common/Cargo.toml index ad6c487..9f531cc 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lesavka_common" -version = "0.13.16" +version = "0.13.17" edition = "2024" build = "build.rs" diff --git a/scripts/install/server.sh b/scripts/install/server.sh index a6f284b..df269af 100755 --- a/scripts/install/server.sh +++ b/scripts/install/server.sh @@ -320,7 +320,7 @@ if systemctl list-unit-files | grep -q '^relay.service'; then sleep 2 fi -mapfile -t GC_CAPTURE_PAIRS < <( +discover_gc_capture_pairs() { for dev in /dev/video*; do props=$(sudo udevadm info -q property -n "$dev" 2>/dev/null || true) index=$(cat "/sys/class/video4linux/$(basename "$dev")/index" 2>/dev/null || true) @@ -333,7 +333,16 @@ mapfile -t GC_CAPTURE_PAIRS < <( fi fi done | sort -u -) +} + +mapfile -t GC_CAPTURE_PAIRS < <(discover_gc_capture_pairs) +if [ "${#GC_CAPTURE_PAIRS[@]}" -ne 2 ]; then + for _ in {1..20}; do + sleep 0.5 + mapfile -t GC_CAPTURE_PAIRS < <(discover_gc_capture_pairs) + [ "${#GC_CAPTURE_PAIRS[@]}" -eq 2 ] && break + done +fi if [ "${#GC_CAPTURE_PAIRS[@]}" -ne 2 ]; then echo "⚠️ GC311 capture cards not fully present; skipping udev eye-link refresh." >&2 diff --git a/server/Cargo.toml b/server/Cargo.toml index 4675806..353dc80 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -10,7 +10,7 @@ bench = false [package] name = "lesavka_server" -version = "0.13.16" +version = "0.13.17" edition = "2024" autobins = false diff --git a/testing/tests/server_install_script_contract.rs b/testing/tests/server_install_script_contract.rs index 7d32498..58ee426 100644 --- a/testing/tests/server_install_script_contract.rs +++ b/testing/tests/server_install_script_contract.rs @@ -66,6 +66,14 @@ fn server_install_builds_eye_links_from_capture_nodes_only() { SERVER_INSTALL.contains("GC_CAPTURE_PAIRS"), "install script should assemble eye-link candidates from udev-tagged capture devices" ); + assert!( + SERVER_INSTALL.contains("discover_gc_capture_pairs"), + "install script should retry capture-node discovery instead of trusting a single early snapshot" + ); + assert!( + SERVER_INSTALL.contains("for _ in {1..20}; do"), + "install script should wait briefly for both GC311 capture nodes to finish enumerating" + ); assert!( SERVER_INSTALL.contains("[ \"$LEFT_TAG\" = \"$RIGHT_TAG\" ]"), "install script should refuse duplicated path tags instead of assigning both eyes to one card"