2025-01-19 22:17:20 +00:00
|
|
|
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"
|
2025-01-19 22:17:20 +00:00
|
|
|
"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:17:20 +00:00
|
|
|
|
2025-01-19 22:57:28 +00:00
|
|
|
ctrl := controllers.New(service, pbProvider)
|
2025-01-19 22:17:20 +00:00
|
|
|
|
2025-01-19 22:57:28 +00:00
|
|
|
cmdController := commandctrl.NewCommandController(historyprovider.NewService())
|
2025-01-19 22:17:20 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|