Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
2.3 kB · 97 lines
Go
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798package main
import ( "context" "fmt" "log/slog" "os" "os/signal" "syscall"
"github.com/bluesky-social/indigo/atproto/atcrypto" "github.com/carlmjohnson/versioninfo" "github.com/urfave/cli/v3" "tangled.org/core/knotmirror" "tangled.org/core/knotmirror/config" "tangled.org/core/knotmirror/db" "tangled.org/core/knotmirror/migrate" "tangled.org/core/log")
func main() { if err := run(os.Args); err != nil { slog.Error("error running knotmirror", "err", err) os.Exit(-1) }}
func run(args []string) error { ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer cancel()
logger := log.New("knotmirror") slog.SetDefault(logger) ctx = log.IntoContext(ctx, logger)
app := cli.Command{ Name: "knotmirror", Usage: "knot mirroring service", Version: versioninfo.Short(), } app.Flags = []cli.Flag{} app.Commands = []*cli.Command{ { Name: "serve", Usage: "run the knotmirror daemon", Action: runKnotMirror, Flags: []cli.Flag{}, }, { Name: "migrate-disk", Usage: "rename mirror dirs from {did}/{rkey} -> {repo_did}; daemon must be stopped", Action: runMigrateDisk, Flags: []cli.Flag{}, }, { Name: "generate-service-auth-key", Usage: "generate a private key for service authentication", Action: generateServiceAuthKey, }, } return app.Run(ctx, args)}
func generateServiceAuthKey(context.Context, *cli.Command) error { key, err := atcrypto.GeneratePrivateKeyK256() if err != nil { return fmt.Errorf("generating service private key: %w", err) } fmt.Printf("MIRROR_SERVICE_PRIVATE_KEY=%s\n", key.Multibase()) return nil}
func runKnotMirror(ctx context.Context, cmd *cli.Command) error { cfg, err := config.Load(ctx) if err != nil { return err }
return knotmirror.Run(ctx, cfg)}
func runMigrateDisk(ctx context.Context, cmd *cli.Command) error { logger := log.FromContext(ctx) cfg, err := config.Load(ctx) if err != nil { return err } database, err := db.Make(ctx, cfg.DbUrl, 4) if err != nil { return err } defer database.Close()
stats, err := migrate.RenameDisk(ctx, cfg.GitRepoBasePath, database, logger) logger.Info("migrate-disk complete", "stats", stats.String()) return err}