admin.go

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