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}