diff --git a/cmd/deploy_history.go b/cmd/deploy_history.go new file mode 100644 index 0000000..3a2bf1f --- /dev/null +++ b/cmd/deploy_history.go @@ -0,0 +1,28 @@ +package cmd + +import ( + "fmt" + + "github.com/aryansharma9917/codewise-cli/pkg/deploy" + "github.com/spf13/cobra" +) + +var historyEnv string + +var deployHistoryCmd = &cobra.Command{ + Use: "history", + Short: "Show Helm release history for an environment", + RunE: func(cmd *cobra.Command, args []string) error { + + if historyEnv == "" { + return fmt.Errorf("please provide --env") + } + + return deploy.History(historyEnv) + }, +} + +func init() { + deployCmd.AddCommand(deployHistoryCmd) + deployHistoryCmd.Flags().StringVar(&historyEnv, "env", "", "Environment name") +} diff --git a/cmd/deploy_logs.go b/cmd/deploy_logs.go new file mode 100644 index 0000000..f7c2fbd --- /dev/null +++ b/cmd/deploy_logs.go @@ -0,0 +1,30 @@ +package cmd + +import ( + "fmt" + + "github.com/aryansharma9917/codewise-cli/pkg/deploy" + "github.com/spf13/cobra" +) + +var logsEnv string +var followLogs bool + +var deployLogsCmd = &cobra.Command{ + Use: "logs", + Short: "Stream logs for deployment pods", + RunE: func(cmd *cobra.Command, args []string) error { + + if logsEnv == "" { + return fmt.Errorf("please provide --env") + } + + return deploy.Logs(logsEnv, followLogs) + }, +} + +func init() { + deployCmd.AddCommand(deployLogsCmd) + deployLogsCmd.Flags().StringVar(&logsEnv, "env", "", "Environment name") + deployLogsCmd.Flags().BoolVar(&followLogs, "follow", false, "Stream logs") +} diff --git a/pkg/deploy/history.go b/pkg/deploy/history.go new file mode 100644 index 0000000..5fad3fb --- /dev/null +++ b/pkg/deploy/history.go @@ -0,0 +1,45 @@ +package deploy + +import ( + "fmt" + "os/exec" +) + +func History(envName string) error { + + environment, err := LoadEnvironment(envName) + if err != nil { + return err + } + + ns := environment.K8s.Namespace + ctx := environment.K8s.Context + release := environment.Helm.Release + + fmt.Println("Release History") + fmt.Println("----------------") + fmt.Println("Environment:", envName) + fmt.Println("Namespace:", ns) + fmt.Println("Release:", release) + fmt.Println() + + args := []string{ + "history", + release, + "-n", + ns, + } + + if ctx != "" { + args = append(args, "--kube-context", ctx) + } + + cmd := exec.Command("helm", args...) + out, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("failed to fetch history") + } + + fmt.Println(string(out)) + return nil +} diff --git a/pkg/deploy/logs.go b/pkg/deploy/logs.go new file mode 100644 index 0000000..faa0410 --- /dev/null +++ b/pkg/deploy/logs.go @@ -0,0 +1,70 @@ +package deploy + +import ( + "fmt" + "os/exec" + "strings" +) + +func Logs(envName string, follow bool) error { + + environment, err := LoadEnvironment(envName) + if err != nil { + return err + } + + ns := environment.K8s.Namespace + ctx := environment.K8s.Context + + // Get pods + args := []string{ + "get", + "pods", + "-n", + ns, + "-o", + "name", + } + + if ctx != "" { + args = append(args, "--context", ctx) + } + + cmd := exec.Command("kubectl", args...) + out, err := cmd.Output() + if err != nil { + return fmt.Errorf("failed to fetch pods") + } + + lines := strings.Split(strings.TrimSpace(string(out)), "\n") + if len(lines) == 0 || lines[0] == "" { + return fmt.Errorf("no pods found") + } + + // Take first pod + pod := lines[0] + + fmt.Println("Fetching logs for:", pod) + fmt.Println() + + logArgs := []string{ + "logs", + pod, + "-n", + ns, + } + + if follow { + logArgs = append(logArgs, "-f") + } + + if ctx != "" { + logArgs = append(logArgs, "--context", ctx) + } + + logCmd := exec.Command("kubectl", logArgs...) + logCmd.Stdout = nil + logCmd.Stderr = nil + + return logCmd.Run() +}