barkeep: initial commit
1 file changed, 72 insertions(+), 0 deletions(-)
changed files
A cmd/barkeep/main.go
@@ -0,0 +1,72 @@ +package main + +import ( + "fmt" + "os" + + "github.com/ardanlabs/conf/v3" + "gitlab.com/tozd/go/errors" + + "go.alanpearce.eu/homestead/internal/publisher" + "go.alanpearce.eu/homestead/internal/server" + "go.alanpearce.eu/homestead/internal/tssrv" + "go.alanpearce.eu/x/log" +) + +type Options struct { + Development bool `conf:"flag:dev"` + Publisher publisher.Options + Tailscale tssrv.Options + Server server.Options +} + +func main() { + options := &Options{} + help, err := conf.Parse("", options) + if err != nil { + if errors.Is(err, conf.ErrHelpWanted) { + fmt.Println(help) + os.Exit(1) + } + panic("parsing runtime configuration: " + err.Error()) + } + + log := log.Configure(!options.Development) + + if options.Development { + options.Publisher.Development = true + options.Tailscale.Development = true + } + + pub, err := publisher.New(&options.Publisher, log.Named("publisher")) + if err != nil { + log.Fatal("error running publisher", "error", err) + } + + if options.Development { + srv, err := server.New(&options.Server, log.Named("server")) + if err != nil { + log.Fatal("error creating server", "error", err) + } + + if err := srv.HostApp(pub.App); err != nil { + log.Fatal("error hosting app", "error", err) + } + + if err := srv.Start(); err != nil { + log.Fatal("error starting server", "error", err) + } + + return + } + + ts, err := tssrv.New(&options.Tailscale) + if err != nil { + log.Fatal("error creating tailscale server", "error", err) + } + + err = ts.Serve(pub.Handler) + if err != nil { + log.Fatal("error serving", "error", err) + } +}