1package cmd23import (4 "context"5 "errors"6 "fmt"7 "io/fs"8 "os"910 "github.com/charmbracelet/soft-serve/pkg/backend"11 "github.com/charmbracelet/soft-serve/pkg/config"12 "github.com/charmbracelet/soft-serve/pkg/db"13 "github.com/charmbracelet/soft-serve/pkg/hooks"14 "github.com/charmbracelet/soft-serve/pkg/store"15 "github.com/charmbracelet/soft-serve/pkg/store/database"16 "github.com/spf13/cobra"17)1819// InitBackendContext initializes the backend context.20func InitBackendContext(cmd *cobra.Command, _ []string) error {21 ctx := cmd.Context()22 cfg := config.FromContext(ctx)23 if _, err := os.Stat(cfg.DataPath); errors.Is(err, fs.ErrNotExist) {24 if err := os.MkdirAll(cfg.DataPath, os.ModePerm); err != nil {25 return fmt.Errorf("create data directory: %w", err)26 }27 }28 dbx, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)29 if err != nil {30 return fmt.Errorf("open database: %w", err)31 }3233 ctx = db.WithContext(ctx, dbx)34 dbstore := database.New(ctx, dbx)35 ctx = store.WithContext(ctx, dbstore)36 be := backend.New(ctx, cfg, dbx, dbstore)37 ctx = backend.WithContext(ctx, be)3839 cmd.SetContext(ctx)4041 return nil42}4344// CloseDBContext closes the database context.45func CloseDBContext(cmd *cobra.Command, _ []string) error {46 ctx := cmd.Context()47 dbx := db.FromContext(ctx)48 if dbx != nil {49 if err := dbx.Close(); err != nil {50 return fmt.Errorf("close database: %w", err)51 }52 }5354 return nil55}5657// InitializeHooks initializes the hooks.58func InitializeHooks(ctx context.Context, cfg *config.Config, be *backend.Backend) error {59 repos, err := be.Repositories(ctx)60 if err != nil {61 return err62 }6364 for _, repo := range repos {65 if err := hooks.GenerateHooks(ctx, cfg, repo.Name()); err != nil {66 return err67 }68 }6970 return nil71}