shankerram3's picture
Deploy from feature/updates branch (PR #132)
e2812ac verified
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""Serve OpenEnv environments locally (TO BE IMPLEMENTED)."""
from __future__ import annotations
from pathlib import Path
from typing import Annotated, Optional
import typer
from .._cli_utils import console
# Commands are registered in __main__.py
def serve(
env_path: Annotated[
Optional[str],
typer.Argument(
help="Path to the environment directory (default: current directory)"
),
] = None,
port: Annotated[
int,
typer.Option("--port", help="Port to serve on"),
] = 8000,
host: Annotated[
str,
typer.Option("--host", help="Host to bind to"),
] = "0.0.0.0",
reload: Annotated[
bool,
typer.Option("--reload", help="Enable auto-reload on code changes"),
] = False,
) -> None:
"""
Serve an OpenEnv environment locally.
TODO: This command is currently not implemented and has been deferred for later.
Planned functionality:
- Run environment server locally without Docker
- Support multiple deployment modes (local, notebook, cluster)
- Auto-reload for development
- Integration with environment's [project.scripts] entry point
For now, use Docker-based serving:
1. Build the environment: openenv build
2. Run the container: docker run -p 8000:8000 <image-name>
Or use uv directly:
uv run --project . server --port 8000
"""
console.print("[bold yellow]⚠ This command is not yet implemented[/bold yellow]\n")
console.print(
"The [bold cyan]openenv serve[/bold cyan] command has been deferred for later."
)
console.print("[bold]Alternative approaches:[/bold]\n")
console.print("[cyan]Option 1: Docker-based serving (recommended)[/cyan]")
console.print(" 1. Build the environment:")
console.print(" [dim]$ openenv build[/dim]")
console.print(" 2. Run the Docker container:")
console.print(
f" [dim]$ docker run -p {port}:{port} openenv-<env-name>:latest[/dim]\n"
)
console.print("[cyan]Option 2: Direct execution with uv[/cyan]")
# Determine environment path
if env_path is None:
env_path_obj = Path.cwd()
else:
env_path_obj = Path(env_path)
# Check for openenv.yaml
openenv_yaml = env_path_obj / "openenv.yaml"
if openenv_yaml.exists():
console.print(" From your environment directory:")
console.print(f" [dim]$ cd {env_path_obj}[/dim]")
console.print(f" [dim]$ uv run --project . server --port {port}[/dim]\n")
else:
console.print(" From an environment directory with pyproject.toml:")
console.print(f" [dim]$ uv run --project . server --port {port}[/dim]\n")
raise typer.Exit(0)