From 6796e36c4035126521971dc0d47bc80ffab1fd4a Mon Sep 17 00:00:00 2001 From: Stanislav Novosad Date: Fri, 30 Jan 2026 11:38:34 -0700 Subject: [PATCH] Quickstart: allow passing DATABASE_STRING as parameter (#4580) --- README.md | 7 +++++++ skyvern/cli/init_command.py | 12 +++++++++++- skyvern/cli/quickstart.py | 32 +++++++++++++++++++------------- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index dea0c170..795a5d34 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,13 @@ This is most helpful for first time run (db setup, db migrations etc). skyvern quickstart ``` +If you already have a database you want to use, pass a custom connection string to skip the +local Docker PostgreSQL setup: + +```bash +skyvern quickstart --database-string "postgresql+psycopg://user:password@localhost:5432/skyvern" +``` + ### 3. Run task #### UI (Recommended) diff --git a/skyvern/cli/init_command.py b/skyvern/cli/init_command.py index 5ecd11aa..c02eb512 100644 --- a/skyvern/cli/init_command.py +++ b/skyvern/cli/init_command.py @@ -21,6 +21,11 @@ from .mcp import setup_local_organization, setup_mcp def init_env( no_postgres: bool = typer.Option(False, "--no-postgres", help="Skip starting PostgreSQL container"), + database_string: str = typer.Option( + "", + "--database-string", + help="Custom database connection string (e.g., postgresql+psycopg://user:password@host:port/dbname). When provided, skips Docker PostgreSQL setup.", + ), ) -> bool: """Interactive initialization command for Skyvern.""" console.print( @@ -40,7 +45,12 @@ def init_env( run_local = infra_choice == "local" if run_local: - setup_postgresql(no_postgres) + if database_string: + console.print("🔗 [bold blue]Using custom database connection...[/bold blue]") + update_or_add_env_var("DATABASE_STRING", database_string) + console.print("✅ [green]Database connection string set in .env file.[/green]") + else: + setup_postgresql(no_postgres) console.print("📊 [bold blue]Running database migrations...[/bold blue]") migrate_db() console.print("✅ [green]Database migration complete.[/green]") diff --git a/skyvern/cli/quickstart.py b/skyvern/cli/quickstart.py index 4e4ae192..b36865ae 100644 --- a/skyvern/cli/quickstart.py +++ b/skyvern/cli/quickstart.py @@ -33,25 +33,31 @@ def check_docker() -> bool: def quickstart( ctx: typer.Context, no_postgres: bool = typer.Option(False, "--no-postgres", help="Skip starting PostgreSQL container"), + database_string: str = typer.Option( + "", + "--database-string", + help="Custom database connection string (e.g., postgresql+psycopg://user:password@host:port/dbname). When provided, skips Docker PostgreSQL setup.", + ), skip_browser_install: bool = typer.Option( False, "--skip-browser-install", help="Skip Chromium browser installation" ), server_only: bool = typer.Option(False, "--server-only", help="Only start the server, not the UI"), ) -> None: """Quickstart command to set up and run Skyvern with one command.""" - # Check Docker - with console.status("Checking Docker installation...") as status: - if not check_docker(): - console.print( - Panel( - "[bold red]Docker is not installed or not running.[/bold red]\n" - "Please install Docker and start it before running quickstart.\n" - "Get Docker from: [link]https://www.docker.com/get-started[/link]", - border_style="red", + # Check Docker only if not using custom database + if not database_string: + with console.status("Checking Docker installation...") as status: + if not check_docker(): + console.print( + Panel( + "[bold red]Docker is not installed or not running.[/bold red]\n" + "Please install Docker and start it before running quickstart.\n" + "Get Docker from: [link]https://www.docker.com/get-started[/link]", + border_style="red", + ) ) - ) - raise typer.Exit(1) - status.update("✅ Docker is installed and running") + raise typer.Exit(1) + status.update("✅ Docker is installed and running") # Run initialization console.print(Panel("[bold green]🚀 Starting Skyvern Quickstart[/bold green]", border_style="green")) @@ -59,7 +65,7 @@ def quickstart( try: # Initialize Skyvern console.print("\n[bold blue]Initializing Skyvern...[/bold blue]") - run_local = init_env(no_postgres=no_postgres) + run_local = init_env(no_postgres=no_postgres, database_string=database_string) # Skip browser installation if requested if not skip_browser_install: