forked from
tangled.org/core
Monorepo for Tangled
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}