ssm-browse/main.go

71 lines
2.1 KiB
Go
Raw Normal View History

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"
2025-01-19 22:57:28 +00:00
"lmika.dev/cmd/ssm-browse/internal/ssm-browse/providers/pasteboardprovider"
"lmika.dev/cmd/ssm-browse/internal/ssm-browse/services/historyprovider"
"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)
2025-01-19 22:57:28 +00:00
pbProvider := pasteboardprovider.New()
2025-01-19 22:57:28 +00:00
ctrl := controllers.New(service, pbProvider)
2025-01-19 22:57:28 +00:00
cmdController := commandctrl.NewCommandController(historyprovider.NewService())
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)
}
}