Monorepo for Tangled
at master 58 lines 1.2 kB view raw
1package main 2 3import ( 4 "context" 5 "log/slog" 6 "os" 7 "os/signal" 8 "syscall" 9 10 "github.com/carlmjohnson/versioninfo" 11 "github.com/urfave/cli/v3" 12 "tangled.org/core/knotmirror" 13 "tangled.org/core/knotmirror/config" 14 "tangled.org/core/log" 15) 16 17func main() { 18 if err := run(os.Args); err != nil { 19 slog.Error("error running knotmirror", "err", err) 20 os.Exit(-1) 21 } 22} 23 24func run(args []string) error { 25 ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) 26 defer cancel() 27 28 logger := log.New("knotmirror") 29 slog.SetDefault(logger) 30 ctx = log.IntoContext(ctx, logger) 31 32 app := cli.Command{ 33 Name: "knotmirror", 34 Usage: "knot mirroring service", 35 Version: versioninfo.Short(), 36 } 37 app.Flags = []cli.Flag{} 38 app.Commands = []*cli.Command{ 39 { 40 Name: "serve", 41 Usage: "run the knotmirror daemon", 42 Action: runKnotMirror, 43 Flags: []cli.Flag{}, 44 }, 45 } 46 return app.Run(ctx, args) 47} 48 49func runKnotMirror(ctx context.Context, cmd *cli.Command) error { 50 logger := log.FromContext(ctx) 51 cfg, err := config.Load(ctx) 52 if err != nil { 53 return err 54 } 55 56 logger.Debug("config loaded:", "config", cfg) 57 return knotmirror.Run(ctx, cfg) 58}