Monorepo for Tangled tangled.org
2

Configure Feed

Select the types of activity you want to include in your feed.

at icy/yrolzt 1.8 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/knotmirror/db" 15 "tangled.org/core/knotmirror/migrate" 16 "tangled.org/core/log" 17) 18 19func main() { 20 if err := run(os.Args); err != nil { 21 slog.Error("error running knotmirror", "err", err) 22 os.Exit(-1) 23 } 24} 25 26func run(args []string) error { 27 ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) 28 defer cancel() 29 30 logger := log.New("knotmirror") 31 slog.SetDefault(logger) 32 ctx = log.IntoContext(ctx, logger) 33 34 app := cli.Command{ 35 Name: "knotmirror", 36 Usage: "knot mirroring service", 37 Version: versioninfo.Short(), 38 } 39 app.Flags = []cli.Flag{} 40 app.Commands = []*cli.Command{ 41 { 42 Name: "serve", 43 Usage: "run the knotmirror daemon", 44 Action: runKnotMirror, 45 Flags: []cli.Flag{}, 46 }, 47 { 48 Name: "migrate-disk", 49 Usage: "rename mirror dirs from {did}/{rkey} -> {repo_did}; daemon must be stopped", 50 Action: runMigrateDisk, 51 Flags: []cli.Flag{}, 52 }, 53 } 54 return app.Run(ctx, args) 55} 56 57func runKnotMirror(ctx context.Context, cmd *cli.Command) error { 58 logger := log.FromContext(ctx) 59 cfg, err := config.Load(ctx) 60 if err != nil { 61 return err 62 } 63 64 logger.Debug("config loaded:", "config", cfg) 65 return knotmirror.Run(ctx, cfg) 66} 67 68func runMigrateDisk(ctx context.Context, cmd *cli.Command) error { 69 logger := log.FromContext(ctx) 70 cfg, err := config.Load(ctx) 71 if err != nil { 72 return err 73 } 74 database, err := db.Make(ctx, cfg.DbUrl, 4) 75 if err != nil { 76 return err 77 } 78 defer database.Close() 79 80 stats, err := migrate.RenameDisk(ctx, cfg.GitRepoBasePath, database, logger) 81 logger.Info("migrate-disk complete", "stats", stats.String()) 82 return err 83}