summary history files

backend/internal/cli/cli.go
package cli

import (
	"context"
	"kd/backend/config"
	"kd/backend/logwrap"
	"os"
	"path"

	"github.com/spf13/cobra"
)

type cli struct {
	debug  bool
	conf   config.Config
	logger *logwrap.LogWrap
}

func (c *cli) init() error {
	kubeConfigPath, ok := os.LookupEnv("KUBECONFIG")
	if !ok {
		homeDir, err := os.UserHomeDir()
		if err != nil {
			return err
		}
		kubeConfigPath = path.Join(homeDir, ".kube", "config.yaml")
	}

	configOpts := []config.OptFunc{
		config.WithDebug(c.debug),
	}

	conf, err := config.NewConfig(kubeConfigPath, configOpts...)
	if err != nil {
		return err
	}
	c.conf = conf

	logger := logwrap.New("logger", os.Stdout, true)
	logger.SetLevel(logwrap.INFO)
	if c.debug {
		logger.SetLevel(logwrap.DEBUG)
	}
	c.logger = logger

	return nil
}

func Execute() {
	cli := &cli{}
	rootCmd := buildRootCmd(cli)
	if err := rootCmd.ExecuteContext(context.TODO()); err != nil {
		os.Exit(1)
	}
}

func buildRootCmd(cli *cli) *cobra.Command {
	rootCmd := &cobra.Command{
		Use: "kt",
		PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
			return cli.init()
		},
	}
	rootCmd.AddCommand(clusterCmd(cli))
	return rootCmd
}