new site
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
"""
|
||||
Deploy command for pushing changes to Git.
|
||||
"""
|
||||
|
||||
import logging
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
import typer
|
||||
from rich.console import Console
|
||||
|
||||
from ..config import get_settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
console = Console()
|
||||
|
||||
|
||||
def deploy_command(
|
||||
message: Optional[str] = None,
|
||||
push: bool = True,
|
||||
) -> None:
|
||||
"""
|
||||
Deploy exported files via Git.
|
||||
|
||||
Adds all changes in the export directory, commits them,
|
||||
and optionally pushes to the remote repository.
|
||||
|
||||
Args:
|
||||
message: Custom commit message (auto-generated if not provided)
|
||||
push: Whether to push to remote after commit
|
||||
"""
|
||||
console.print("\n[bold blue]Deploying changes[/bold blue]\n")
|
||||
|
||||
settings = get_settings()
|
||||
project_root = Path(settings.export_dir).parent
|
||||
|
||||
# Verify we're in a git repo
|
||||
if not (project_root / ".git").exists():
|
||||
console.print("[red]Not a git repository![/red]")
|
||||
console.print(f"Expected .git directory in {project_root}")
|
||||
raise typer.Exit(1)
|
||||
|
||||
try:
|
||||
# Check for changes
|
||||
result = subprocess.run(
|
||||
["git", "status", "--porcelain"],
|
||||
cwd=project_root,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
)
|
||||
|
||||
if not result.stdout.strip():
|
||||
console.print("[yellow]No changes to deploy.[/yellow]")
|
||||
return
|
||||
|
||||
# Show changes
|
||||
console.print("[bold]Changes to deploy:[/bold]")
|
||||
console.print(result.stdout)
|
||||
|
||||
# Confirm deployment
|
||||
if not typer.confirm("Deploy these changes?"):
|
||||
console.print("[yellow]Deployment cancelled.[/yellow]")
|
||||
raise typer.Exit(0)
|
||||
|
||||
# Generate commit message if not provided
|
||||
if not message:
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
|
||||
message = f"Directory update: {timestamp}"
|
||||
|
||||
# Stage changes
|
||||
console.print("Staging changes...")
|
||||
subprocess.run(
|
||||
["git", "add", "export/", "static/images/companies/"],
|
||||
cwd=project_root,
|
||||
check=True,
|
||||
)
|
||||
|
||||
# Commit
|
||||
console.print(f"Committing: {message}")
|
||||
subprocess.run(
|
||||
["git", "commit", "-m", message],
|
||||
cwd=project_root,
|
||||
check=True,
|
||||
)
|
||||
|
||||
# Push if requested
|
||||
if push:
|
||||
console.print("Pushing to remote...")
|
||||
subprocess.run(
|
||||
["git", "push"],
|
||||
cwd=project_root,
|
||||
check=True,
|
||||
)
|
||||
console.print("[green]Changes pushed to remote.[/green]")
|
||||
else:
|
||||
console.print("[yellow]Changes committed locally but not pushed.[/yellow]")
|
||||
|
||||
console.print("\n[bold green]Deployment complete![/bold green]")
|
||||
|
||||
# Show deployment info
|
||||
console.print("\nVercel will automatically deploy the changes.")
|
||||
console.print("Check deployment status at: https://vercel.com/dashboard")
|
||||
|
||||
except subprocess.CalledProcessError as e:
|
||||
console.print(f"[red]Git command failed: {e}[/red]")
|
||||
if e.stderr:
|
||||
console.print(f"Error: {e.stderr}")
|
||||
raise typer.Exit(1)
|
||||
|
||||
except Exception as e:
|
||||
console.print(f"[red]Deployment failed: {e}[/red]")
|
||||
logger.exception("Deployment error")
|
||||
raise typer.Exit(1)
|
||||
|
||||
|
||||
def status_command() -> None:
|
||||
"""Show git status of the project."""
|
||||
settings = get_settings()
|
||||
project_root = Path(settings.export_dir).parent
|
||||
|
||||
try:
|
||||
# Git status
|
||||
result = subprocess.run(
|
||||
["git", "status"],
|
||||
cwd=project_root,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
)
|
||||
console.print(result.stdout)
|
||||
|
||||
# Last commit
|
||||
console.print("\n[bold]Last commit:[/bold]")
|
||||
result = subprocess.run(
|
||||
["git", "log", "-1", "--oneline"],
|
||||
cwd=project_root,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
)
|
||||
console.print(result.stdout)
|
||||
|
||||
except subprocess.CalledProcessError as e:
|
||||
console.print(f"[red]Git command failed: {e}[/red]")
|
||||
raise typer.Exit(1)
|
||||
Reference in New Issue
Block a user