feat: Add opt-out option for automatic PostgreSQL container startup (#2286)

This commit is contained in:
Piyush
2025-05-05 09:21:37 +05:30
committed by GitHub
parent cbf8a6ac6b
commit df6252f80a

View File

@@ -109,8 +109,18 @@ def is_postgres_container_exists() -> bool:
return code == 0 return code == 0
def setup_postgresql() -> None: def setup_postgresql(no_postgres: bool = False) -> None:
print("Setting up PostgreSQL...") """Set up PostgreSQL database for Skyvern.
This function checks if a PostgreSQL server is running locally or in Docker.
If no PostgreSQL server is found, it offers to start a Docker container
running PostgreSQL (unless explicitly opted out).
Args:
no_postgres: When True, skips starting a PostgreSQL container even if no
local PostgreSQL server is detected. Useful when planning to
use Docker Compose, which provides its own PostgreSQL service.
"""
if command_exists("psql") and is_postgres_running(): if command_exists("psql") and is_postgres_running():
print("PostgreSQL is already running locally.") print("PostgreSQL is already running locally.")
@@ -120,6 +130,11 @@ def setup_postgresql() -> None:
create_database_and_user() create_database_and_user()
return return
if no_postgres:
print("Skipping PostgreSQL container setup as requested.")
print("If you plan to use Docker Compose, its Postgres service will start automatically.")
return
if not is_docker_running(): if not is_docker_running():
print("Docker is not running or not installed. Please install or start Docker and try again.") print("Docker is not running or not installed. Please install or start Docker and try again.")
exit(1) exit(1)
@@ -127,6 +142,19 @@ def setup_postgresql() -> None:
if is_postgres_running_in_docker(): if is_postgres_running_in_docker():
print("PostgreSQL is already running in a Docker container.") print("PostgreSQL is already running in a Docker container.")
else: else:
if not no_postgres:
start_postgres = (
input(
'No local Postgres detected. Start a disposable container now? (Y/n) [Y]\n[Tip: choose "n" if you plan to run Skyvern via Docker Compose instead of `skyvern run server`] '
)
.strip()
.lower()
)
if start_postgres in ["n", "no"]:
print("Skipping PostgreSQL container setup.")
print("If you plan to use Docker Compose, its Postgres service will start automatically.")
return
print("Attempting to install PostgreSQL via Docker...") print("Attempting to install PostgreSQL via Docker...")
if not is_postgres_container_exists(): if not is_postgres_container_exists():
run_command( run_command(
@@ -571,7 +599,7 @@ def setup_windsurf_config(host_system: str, path_to_env: str) -> bool:
skyvern_api_key = os.environ.get("SKYVERN_API_KEY", "") skyvern_api_key = os.environ.get("SKYVERN_API_KEY", "")
if not skyvern_base_url or not skyvern_api_key: if not skyvern_base_url or not skyvern_api_key:
print( print(
"Error: SKYVERN_BASE_URL and SKYVERN_API_KEY must be set in .env file to set up Windsurf MCP. Please open {path_windsurf_config} and set the these variables manually." "Error: SKYVERN_BASE_URL and SKYVERN_API_KEY must be set in .env file to set up Windsurf MCP. Please open {path_windsurf_config} and set these variables manually."
) )
try: try:
@@ -830,14 +858,14 @@ def run_mcp() -> None:
@cli_app.command(name="init") @cli_app.command(name="init")
def init() -> None: def init(no_postgres: bool = typer.Option(False, "--no-postgres", help="Skip starting PostgreSQL container")) -> None:
run_local_str = ( run_local_str = (
input("Would you like to run Skyvern locally or in the cloud? (local/cloud) [cloud]: ").strip().lower() input("Would you like to run Skyvern locally or in the cloud? (local/cloud) [cloud]: ").strip().lower()
) )
run_local = run_local_str == "local" if run_local_str else False run_local = run_local_str == "local" if run_local_str else False
if run_local: if run_local:
setup_postgresql() setup_postgresql(no_postgres)
migrate_db() migrate_db()
api_key = asyncio.run(_setup_local_organization()) api_key = asyncio.run(_setup_local_organization())