Skip to content

Commit 002dac4

Browse files
committed
fix: discover pre-running Docker servers even when docker-compose is unavailable
In CI (GitHub Actions ubuntu-latest / ubuntu-24.04), Baikal runs as a service container that is already up before the tests start. The legacy `docker-compose` standalone binary is not installed on these runners (only the `docker compose` plugin is), so `verify_docker()` returned False and `_discover_docker_servers()` bailed out without registering Baikal. The async test job used `-k baikal` with no fallback, producing exit-code 5 (no tests collected). Two fixes: * `verify_docker()` now accepts either `docker-compose --version` or `docker compose version` (plugin form). * `_discover_docker_servers()` no longer skips registration entirely when Docker is not startable; it still registers servers that are already accessible (e.g. a CI service container), letting `DockerTestServer.start()` handle them with its existing "already running" detection. prompt: have a look into this failure: gh run view 24923998455 AI Prompts: claude-sonnet-4-6: have a look into this failure: `gh run view 24923998455`
1 parent d26c9ba commit 002dac4

2 files changed

Lines changed: 17 additions & 24 deletions

File tree

tests/test_servers/base.py

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -308,30 +308,20 @@ def verify_docker() -> bool:
308308
Check if docker and docker-compose are available.
309309
310310
Returns:
311-
True if docker-compose is available and docker daemon is running
311+
True if docker compose is available and docker daemon is running
312312
"""
313313
import subprocess
314314

315-
try:
316-
subprocess.run(
317-
["docker-compose", "--version"],
318-
capture_output=True,
319-
check=True,
320-
timeout=5,
321-
)
322-
subprocess.run(
323-
["docker", "ps"],
324-
capture_output=True,
325-
check=True,
326-
timeout=5,
327-
)
328-
return True
329-
except (
330-
subprocess.CalledProcessError,
331-
FileNotFoundError,
332-
subprocess.TimeoutExpired,
333-
):
334-
return False
315+
def _run(*cmd: str) -> bool:
316+
try:
317+
subprocess.run(list(cmd), capture_output=True, check=True, timeout=5)
318+
return True
319+
except (subprocess.CalledProcessError, FileNotFoundError, subprocess.TimeoutExpired):
320+
return False
321+
322+
# Accept either the legacy standalone binary or the modern plugin form.
323+
compose_ok = _run("docker-compose", "--version") or _run("docker", "compose", "version")
324+
return compose_ok and _run("docker", "ps")
335325

336326
def start(self) -> None:
337327
"""

tests/test_servers/registry.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,7 @@ def _discover_docker_servers(self) -> None:
297297

298298
from .base import DockerTestServer
299299

300-
if not DockerTestServer.verify_docker():
301-
return
300+
docker_available = DockerTestServer.verify_docker()
302301

303302
# Look for docker-test-servers directories
304303
docker_servers_dir = Path(__file__).parent.parent / "docker-test-servers"
@@ -312,7 +311,11 @@ def _discover_docker_servers(self) -> None:
312311
server_class = get_server_class(server_name)
313312

314313
if server_class is not None and server_name not in self._servers:
315-
self.register(server_class({"docker_dir": str(server_dir)}))
314+
server = server_class({"docker_dir": str(server_dir)})
315+
# Register if Docker is available (can start containers) OR if
316+
# the server is already running (e.g. a CI service container).
317+
if docker_available or server.is_accessible():
318+
self.register(server)
316319

317320
def get_caldav_servers_list(self) -> list[dict]:
318321
"""

0 commit comments

Comments
 (0)