1package main
2
3import (
4 "fmt"
5
6 "github.com/charmbracelet/soft-serve/server/backend"
7 "github.com/charmbracelet/soft-serve/server/config"
8 "github.com/charmbracelet/soft-serve/server/db"
9 "github.com/charmbracelet/soft-serve/server/db/migrate"
10 "github.com/spf13/cobra"
11)
12
13var (
14 adminCmd = &cobra.Command{
15 Use: "admin",
16 Short: "Administrate the server",
17 }
18
19 migrateCmd = &cobra.Command{
20 Use: "migrate",
21 Short: "Migrate the database to the latest version",
22 PersistentPreRunE: initBackendContext,
23 PersistentPostRunE: closeDBContext,
24 RunE: func(cmd *cobra.Command, _ []string) error {
25 ctx := cmd.Context()
26 db := db.FromContext(ctx)
27 if err := migrate.Migrate(ctx, db); err != nil {
28 return fmt.Errorf("migration: %w", err)
29 }
30
31 return nil
32 },
33 }
34
35 rollbackCmd = &cobra.Command{
36 Use: "rollback",
37 Short: "Rollback the database to the previous version",
38 PersistentPreRunE: initBackendContext,
39 PersistentPostRunE: closeDBContext,
40 RunE: func(cmd *cobra.Command, _ []string) error {
41 ctx := cmd.Context()
42 db := db.FromContext(ctx)
43 if err := migrate.Rollback(ctx, db); err != nil {
44 return fmt.Errorf("rollback: %w", err)
45 }
46
47 return nil
48 },
49 }
50
51 syncHooksCmd = &cobra.Command{
52 Use: "sync-hooks",
53 Short: "Update repository hooks",
54 PersistentPreRunE: initBackendContext,
55 PersistentPostRunE: closeDBContext,
56 RunE: func(cmd *cobra.Command, _ []string) error {
57 ctx := cmd.Context()
58 cfg := config.FromContext(ctx)
59 be := backend.FromContext(ctx)
60 if err := initializeHooks(ctx, cfg, be); err != nil {
61 return fmt.Errorf("initialize hooks: %w", err)
62 }
63
64 return nil
65 },
66 }
67)
68
69func init() {
70 adminCmd.AddCommand(
71 syncHooksCmd,
72 migrateCmd,
73 rollbackCmd,
74 )
75}