diff --git a/.github/workflows/builder.yml b/.github/workflows/builder.yml index 45f72facd..31445051f 100644 --- a/.github/workflows/builder.yml +++ b/.github/workflows/builder.yml @@ -290,15 +290,36 @@ jobs: - name: Start the Supervisor run: docker start hassio_supervisor - - name: Wait for Supervisor to come up + - &wait_for_supervisor + name: Wait for Supervisor to come up run: | SUPERVISOR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' hassio_supervisor) - ping="error" - while [ "$ping" != "ok" ]; do - ping=$(curl -sSL "http://$SUPERVISOR/supervisor/ping" | jq -r '.result') + echo "Waiting for Supervisor API at http://${SUPERVISOR}/supervisor/ping" + timeout=300 + elapsed=0 + + while [ $elapsed -lt $timeout ]; do + if response=$(curl -sSf "http://${SUPERVISOR}/supervisor/ping" 2>/dev/null); then + if echo "$response" | jq -e '.result == "ok"' >/dev/null 2>&1; then + echo "Supervisor is up! (took ${elapsed}s)" + exit 0 + fi + fi + + if [ $((elapsed % 15)) -eq 0 ]; then + echo "Still waiting... (${elapsed}s/${timeout}s)" + fi + sleep 5 + elapsed=$((elapsed + 5)) done + echo "ERROR: Supervisor failed to start within ${timeout}s" + echo "Last response: $response" + echo "Checking supervisor logs..." + docker logs --tail 50 hassio_supervisor + exit 1 + - name: Check the Supervisor run: | echo "Checking supervisor info" @@ -362,14 +383,7 @@ jobs: exit 1 fi - - name: Wait for Supervisor to come up - run: | - SUPERVISOR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' hassio_supervisor) - ping="error" - while [ "$ping" != "ok" ]; do - ping=$(curl -sSL "http://$SUPERVISOR/supervisor/ping" | jq -r '.result') - sleep 5 - done + - *wait_for_supervisor - name: Restore SSH add-on from backup run: |