package main import ( "fmt" "github.com/bdw/ship/internal/ssh" "github.com/bdw/ship/internal/state" "github.com/spf13/cobra" ) var statusCmd = &cobra.Command{ Use: "status ", Short: "Check status of a deployment", Args: cobra.ExactArgs(1), RunE: runStatus, } func runStatus(cmd *cobra.Command, args []string) error { name := args[0] st, err := state.Load() if err != nil { return fmt.Errorf("error loading state: %w", err) } host := hostFlag if host == "" { host = st.GetDefaultHost() } if host == "" { return fmt.Errorf("--host is required") } app, err := st.GetApp(host, name) if err != nil { return err } if app.Type != "app" { return fmt.Errorf("status is only available for apps, not static sites") } client, err := ssh.Connect(host) if err != nil { return fmt.Errorf("error connecting to VPS: %w", err) } defer client.Close() output, err := client.RunSudo(fmt.Sprintf("systemctl status %s", name)) if err != nil { // systemctl status returns non-zero for non-active services // but we still want to show the output fmt.Print(output) return nil } fmt.Print(output) return nil }