67652899eb
Review feedback: don't bury a parallel docker util in the orchestrator. But reusing backend.docker.util (docker_mod) isn't right either — importing it runs backend/__init__.py, which eagerly loads all three backends (docker + firecracker + macos) plus the manifest/egress/git-gate/supervise framework (~76 modules), so every orchestrator import would drag the whole backend layer in. Compromise: promote the helper to a top-level, framework-free bot_bottle/docker_cmd.py (single stdlib import), a proper shared home the orchestrator's docker components use now and backend.docker.util can adopt later. Verified `import bot_bottle.orchestrator` stays lean (12 modules, no firecracker/macos backends). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WBMWTEtQdJ4W5UrWuLHCck
28 lines
1.1 KiB
Python
28 lines
1.1 KiB
Python
"""Lean, framework-free `docker` subprocess primitive.
|
|
|
|
Deliberately a top-level module with a single stdlib import so it can be
|
|
reused from anywhere without cost. It is intentionally *not* placed in
|
|
`backend.docker.util`: importing that module runs `backend/__init__.py`,
|
|
which eagerly loads all three bottle backends (docker + firecracker +
|
|
macos) plus the manifest/egress/git-gate/supervise framework — ~76 modules
|
|
— which would drag the whole backend layer into the deliberately-lean
|
|
orchestrator. This primitive stays free of that so both the orchestrator's
|
|
docker components and (in time) `backend.docker.util` can share it."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import subprocess
|
|
|
|
|
|
def run_docker(argv: list[str]) -> subprocess.CompletedProcess[str]:
|
|
"""Run a `docker` command, capturing stdout/stderr as text. Never raises
|
|
on a non-zero exit — callers inspect `returncode` / `stderr` so they can
|
|
stay fail-closed or tolerate idempotent no-ops (e.g. removing an
|
|
already-absent container)."""
|
|
return subprocess.run(
|
|
argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=False,
|
|
)
|
|
|
|
|
|
__all__ = ["run_docker"]
|