From e6e3c207bcee531b135824688adf1a56ae427a01 Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Mon, 10 Mar 2025 22:58:27 -0600 Subject: [PATCH] feat(cli): auto mount current directory as /app --- mcontainer/cli.py | 23 +++++++++++++++++++++-- mcontainer/container.py | 22 +++++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/mcontainer/cli.py b/mcontainer/cli.py index 4301904..7282a0c 100644 --- a/mcontainer/cli.py +++ b/mcontainer/cli.py @@ -24,7 +24,14 @@ def main(ctx: typer.Context) -> None: """Monadical Container Tool""" # If no command is specified, create a session if ctx.invoked_subcommand is None: - create_session(driver=None, project=None, env=[], name=None, no_connect=False) + create_session( + driver=None, + project=None, + env=[], + name=None, + no_connect=False, + no_mount=False, + ) @app.command() @@ -96,6 +103,9 @@ def create_session( no_connect: bool = typer.Option( False, "--no-connect", help="Don't automatically connect to the session" ), + no_mount: bool = typer.Option( + False, "--no-mount", help="Don't mount local directory to /app" + ), ) -> None: """Create a new MC session""" # Use default driver if not specified @@ -119,6 +129,7 @@ def create_session( project=project, environment=environment, session_name=name, + mount_local=not no_mount, ) if session: @@ -223,10 +234,18 @@ def quick_create( no_connect: bool = typer.Option( False, "--no-connect", help="Don't automatically connect to the session" ), + no_mount: bool = typer.Option( + False, "--no-mount", help="Don't mount local directory to /app" + ), ) -> None: """Create a new MC session with a project repository""" create_session( - driver=driver, project=project, env=env, name=name, no_connect=no_connect + driver=driver, + project=project, + env=env, + name=name, + no_connect=no_connect, + no_mount=no_mount, ) diff --git a/mcontainer/container.py b/mcontainer/container.py index c16e713..39095ae 100644 --- a/mcontainer/container.py +++ b/mcontainer/container.py @@ -89,8 +89,17 @@ class ContainerManager: project: Optional[str] = None, environment: Optional[Dict[str, str]] = None, session_name: Optional[str] = None, + mount_local: bool = True, ) -> Optional[Session]: - """Create a new MC session""" + """Create a new MC session + + Args: + driver_name: The name of the driver to use + project: Optional project repository URL + environment: Optional environment variables + session_name: Optional session name + mount_local: Whether to mount the current directory to /app + """ try: # Validate driver exists driver = self.config_manager.get_driver(driver_name) @@ -116,6 +125,16 @@ class ContainerManager: print(f"Pulling image {driver.image}...") self.client.images.pull(driver.image) + # Set up volume mounts + volumes = {} + if mount_local: + # Mount current directory to /app in the container + import os + + current_dir = os.getcwd() + volumes[current_dir] = {"bind": "/app", "mode": "rw"} + print(f"Mounting local directory {current_dir} to /app") + # Create container container = self.client.containers.create( image=driver.image, @@ -125,6 +144,7 @@ class ContainerManager: tty=True, stdin_open=True, environment=env_vars, + volumes=volumes, labels={ "mc.session": "true", "mc.session.id": session_id,