diff --git a/opencode-container.py b/opencode-container.py index 84a7919..2419caa 100755 --- a/opencode-container.py +++ b/opencode-container.py @@ -1,12 +1,20 @@ #!/usr/bin/env python3 import hashlib +import logging import os import subprocess import sys import time from pathlib import Path +logging.basicConfig( + level=logging.INFO, + format='%(message)s', + stream=sys.stderr +) +logger = logging.getLogger(__name__) + class OpenCodeContainer: IMAGE = "opencode-container:latest" @@ -45,6 +53,14 @@ class OpenCodeContainer: # Ensure container home directory exists self.container_home_path.mkdir(parents=True, exist_ok=True) + # Check if this project already has a running container + if self.container_exists() and self.container_running(): + logger.error(f"Project '{self.project_path.name}' already has a running OpenCode container.") + logger.error(f"Container name: {self.container_name}") + logger.error("Wait for the current instance to finish or manually stop it with:") + logger.error(f" docker stop {self.container_name}") + sys.exit(1) + # Pre-create project directory structure to prevent root-owned directories try: relative_path = self.project_path.relative_to(Path.home()) @@ -60,7 +76,7 @@ class OpenCodeContainer: self.create_container() if not self.start_container(): - print("Recreating container due to failed start") + logger.warning("Recreating container due to failed start") self.remove_container() self.create_container() if not self.start_container(): @@ -83,7 +99,7 @@ class OpenCodeContainer: ).returncode == 0 def build_image(self) -> None: - print(f"Building image '{self.IMAGE}' with user {self.host_username} ({self.host_uid}:{self.host_gid})") + logger.info(f"Building image '{self.IMAGE}' with user {self.host_username} ({self.host_uid}:{self.host_gid})") self._run([ "docker", "build", "--build-arg", f"USERNAME={self.host_username}", @@ -98,7 +114,7 @@ class OpenCodeContainer: # ========================= def create_container(self) -> None: - print(f"Creating container '{self.container_name}'") + logger.info(f"Creating container '{self.container_name}'") self._run([ "docker", "create",