package main import ( "context" "flag" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/ssm" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" "github.com/lmika/gopkgs/cli" "lmika.dev/cmd/ssm-browse/internal/common/ui/commandctrl" "lmika.dev/cmd/ssm-browse/internal/common/ui/logging" "lmika.dev/cmd/ssm-browse/internal/ssm-browse/controllers" "lmika.dev/cmd/ssm-browse/internal/ssm-browse/providers/awsssm" "lmika.dev/cmd/ssm-browse/internal/ssm-browse/services/ssmparameters" "lmika.dev/cmd/ssm-browse/internal/ssm-browse/ui" "os" ) func main() { var flagLocal = flag.Bool("local", false, "local endpoint") var flagDebug = flag.String("debug", "", "file to log debug messages") flag.Parse() // Pre-determine if layout has dark background. This prevents calls for creating a list to hang. lipgloss.HasDarkBackground() closeFn := logging.EnableLogging(*flagDebug) defer closeFn() cfg, err := config.LoadDefaultConfig(context.Background()) if err != nil { cli.Fatalf("cannot load AWS config: %v", err) } var ssmClient *ssm.Client if *flagLocal { ssmClient = ssm.NewFromConfig(cfg, ssm.WithEndpointResolver(ssm.EndpointResolverFromURL("http://localhost:4566"))) } else { ssmClient = ssm.NewFromConfig(cfg) } provider := awsssm.NewProvider(ssmClient) service := ssmparameters.NewService(provider) ctrl := controllers.New(service) cmdController := commandctrl.NewCommandController(nil) cmdController.AddCommands(&commandctrl.CommandList{ Commands: map[string]commandctrl.Command{ "cd": func(ec commandctrl.ExecContext, args []string) tea.Msg { return ctrl.ChangePrefix(args[0]) }, }, }) model := ui.NewModel(ctrl, cmdController) p := tea.NewProgram(model, tea.WithAltScreen()) if err := p.Start(); err != nil { fmt.Printf("Alas, there's been an error: %v", err) os.Exit(1) } }