0f41cab26632f05c0735af441ccff82809969489
- Author
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Committer
- GitHub <noreply@github.com>
- Date
Message
Diff
This diff is truncated to protect this page.
1diff --git a/cmd/cmd.go b/cmd/cmd.go
2new file mode 100644
3index 0000000000000000000000000000000000000000..9aead6369d7faa2932dcea9d4dcf3ef8766336ee
4--- /dev/null
5+++ b/cmd/cmd.go
6@@ -0,0 +1,71 @@
7+package cmd
8+
9+import (
10+ "context"
11+ "errors"
12+ "fmt"
13+ "io/fs"
14+ "os"
15+
16+ "github.com/charmbracelet/soft-serve/pkg/backend"
17+ "github.com/charmbracelet/soft-serve/pkg/config"
18+ "github.com/charmbracelet/soft-serve/pkg/db"
19+ "github.com/charmbracelet/soft-serve/pkg/hooks"
20+ "github.com/charmbracelet/soft-serve/pkg/store"
21+ "github.com/charmbracelet/soft-serve/pkg/store/database"
22+ "github.com/spf13/cobra"
23+)
24+
25+// InitBackendContext initializes the backend context.
26+func InitBackendContext(cmd *cobra.Command, _ []string) error {
27+ ctx := cmd.Context()
28+ cfg := config.FromContext(ctx)
29+ if _, err := os.Stat(cfg.DataPath); errors.Is(err, fs.ErrNotExist) {
30+ if err := os.MkdirAll(cfg.DataPath, os.ModePerm); err != nil {
31+ return fmt.Errorf("create data directory: %w", err)
32+ }
33+ }
34+ dbx, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)
35+ if err != nil {
36+ return fmt.Errorf("open database: %w", err)
37+ }
38+
39+ ctx = db.WithContext(ctx, dbx)
40+ dbstore := database.New(ctx, dbx)
41+ ctx = store.WithContext(ctx, dbstore)
42+ be := backend.New(ctx, cfg, dbx)
43+ ctx = backend.WithContext(ctx, be)
44+
45+ cmd.SetContext(ctx)
46+
47+ return nil
48+}
49+
50+// CloseDBContext closes the database context.
51+func CloseDBContext(cmd *cobra.Command, _ []string) error {
52+ ctx := cmd.Context()
53+ dbx := db.FromContext(ctx)
54+ if dbx != nil {
55+ if err := dbx.Close(); err != nil {
56+ return fmt.Errorf("close database: %w", err)
57+ }
58+ }
59+
60+ return nil
61+}
62+
63+// InitializeHooks initializes the hooks.
64+func InitializeHooks(ctx context.Context, cfg *config.Config, be *backend.Backend) error {
65+ repos, err := be.Repositories(ctx)
66+ if err != nil {
67+ return err
68+ }
69+
70+ for _, repo := range repos {
71+ if err := hooks.GenerateHooks(ctx, cfg, repo.Name()); err != nil {
72+ return err
73+ }
74+ }
75+
76+ return nil
77+}
78diff --git a/cmd/soft/admin.go b/cmd/soft/admin/admin.go
79rename from cmd/soft/admin.go
80rename to cmd/soft/admin/admin.go
81index 16d31f2783026e7ff59fb93b7aa271edfed7dbc8..7138f5754e44c8963733012be0fa80160f99b315 100644
82--- a/cmd/soft/admin.go
83+++ b/cmd/soft/admin/admin.go
84@@ -1,17 +1,19 @@
85-package main
86+package admin
87
88 import (
89 "fmt"
90
91- "github.com/charmbracelet/soft-serve/server/backend"
92- "github.com/charmbracelet/soft-serve/server/config"
93- "github.com/charmbracelet/soft-serve/server/db"
94- "github.com/charmbracelet/soft-serve/server/db/migrate"
95+ "github.com/charmbracelet/soft-serve/cmd"
96+ "github.com/charmbracelet/soft-serve/pkg/backend"
97+ "github.com/charmbracelet/soft-serve/pkg/config"
98+ "github.com/charmbracelet/soft-serve/pkg/db"
99+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
100 "github.com/spf13/cobra"
101 )
102
103 var (
104- adminCmd = &cobra.Command{
105+ // Command is the admin command.
106+ Command = &cobra.Command{
107 Use: "admin",
108 Short: "Administrate the server",
109 }
110@@ -19,8 +21,8 @@ var (
111 migrateCmd = &cobra.Command{
112 Use: "migrate",
113 Short: "Migrate the database to the latest version",
114- PersistentPreRunE: initBackendContext,
115- PersistentPostRunE: closeDBContext,
116+ PersistentPreRunE: cmd.InitBackendContext,
117+ PersistentPostRunE: cmd.CloseDBContext,
118 RunE: func(cmd *cobra.Command, _ []string) error {
119 ctx := cmd.Context()
120 db := db.FromContext(ctx)
121@@ -35,8 +37,8 @@ var (
122 rollbackCmd = &cobra.Command{
123 Use: "rollback",
124 Short: "Rollback the database to the previous version",
125- PersistentPreRunE: initBackendContext,
126- PersistentPostRunE: closeDBContext,
127+ PersistentPreRunE: cmd.InitBackendContext,
128+ PersistentPostRunE: cmd.CloseDBContext,
129 RunE: func(cmd *cobra.Command, _ []string) error {
130 ctx := cmd.Context()
131 db := db.FromContext(ctx)
132@@ -51,13 +53,13 @@ var (
133 syncHooksCmd = &cobra.Command{
134 Use: "sync-hooks",
135 Short: "Update repository hooks",
136- PersistentPreRunE: initBackendContext,
137- PersistentPostRunE: closeDBContext,
138- RunE: func(cmd *cobra.Command, _ []string) error {
139- ctx := cmd.Context()
140+ PersistentPreRunE: cmd.InitBackendContext,
141+ PersistentPostRunE: cmd.CloseDBContext,
142+ RunE: func(c *cobra.Command, _ []string) error {
143+ ctx := c.Context()
144 cfg := config.FromContext(ctx)
145 be := backend.FromContext(ctx)
146- if err := initializeHooks(ctx, cfg, be); err != nil {
147+ if err := cmd.InitializeHooks(ctx, cfg, be); err != nil {
148 return fmt.Errorf("initialize hooks: %w", err)
149 }
150
151@@ -67,7 +69,7 @@ var (
152 )
153
154 func init() {
155- adminCmd.AddCommand(
156+ Command.AddCommand(
157 syncHooksCmd,
158 migrateCmd,
159 rollbackCmd,
160diff --git a/cmd/soft/browse.go b/cmd/soft/browse/browse.go
161rename from cmd/soft/browse.go
162rename to cmd/soft/browse/browse.go
163index 8cb760198a989cdf94a23e541d61bffe2ee775f4..43fa3e612036eaa0e36908cac09a9923cf51f366 100644
164--- a/cmd/soft/browse.go
165+++ b/cmd/soft/browse/browse.go
166@@ -1,4 +1,4 @@
167-package main
168+package browse
169
170 import (
171 "fmt"
172@@ -9,15 +9,16 @@ import (
173 tea "github.com/charmbracelet/bubbletea"
174 "github.com/charmbracelet/lipgloss"
175 "github.com/charmbracelet/soft-serve/git"
176- "github.com/charmbracelet/soft-serve/server/proto"
177- "github.com/charmbracelet/soft-serve/server/ui/common"
178- "github.com/charmbracelet/soft-serve/server/ui/components/footer"
179- "github.com/charmbracelet/soft-serve/server/ui/pages/repo"
180+ "github.com/charmbracelet/soft-serve/pkg/proto"
181+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
182+ "github.com/charmbracelet/soft-serve/pkg/ui/components/footer"
183+ "github.com/charmbracelet/soft-serve/pkg/ui/pages/repo"
184 "github.com/muesli/termenv"
185 "github.com/spf13/cobra"
186 )
187
188-var browseCmd = &cobra.Command{
189+// Command is the browse command.
190+var Command = &cobra.Command{
191 Use: "browse PATH",
192 Short: "Browse a repository",
193 Args: cobra.MaximumNArgs(1),
194@@ -72,7 +73,6 @@ func init() {
195 // HACK: This is a hack to hide the clone url
196 // TODO: Make this configurable
197 common.CloneCmd = func(publicURL, name string) string { return "" }
198- rootCmd.AddCommand(browseCmd)
199 }
200
201 type state int
202diff --git a/cmd/soft/hook.go b/cmd/soft/hook/hook.go
203rename from cmd/soft/hook.go
204rename to cmd/soft/hook/hook.go
205index 1bb32b4eab6e5fd8e981c71f7c6144b296e6d758..43718ed22042e0c9d5c6b84cb9ac1488b3c724eb 100644
206--- a/cmd/soft/hook.go
207+++ b/cmd/soft/hook/hook.go
208@@ -1,4 +1,4 @@
209-package main
210+package hook
211
212 import (
213 "bufio"
214@@ -13,9 +13,10 @@ import (
215 "strings"
216
217 "github.com/charmbracelet/log"
218- "github.com/charmbracelet/soft-serve/server/backend"
219- "github.com/charmbracelet/soft-serve/server/config"
220- "github.com/charmbracelet/soft-serve/server/hooks"
221+ "github.com/charmbracelet/soft-serve/cmd"
222+ "github.com/charmbracelet/soft-serve/pkg/backend"
223+ "github.com/charmbracelet/soft-serve/pkg/config"
224+ "github.com/charmbracelet/soft-serve/pkg/hooks"
225 "github.com/spf13/cobra"
226 )
227
228@@ -26,23 +27,24 @@ var (
229 // Deprecated: this flag is ignored.
230 configPath string
231
232- hookCmd = &cobra.Command{
233+ // Command is the hook command.
234+ Command = &cobra.Command{
235 Use: "hook",
236 Short: "Run git server hooks",
237 Long: "Handles Soft Serve git server hooks.",
238 Hidden: true,
239- PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
240- logger := log.FromContext(cmd.Context())
241- if err := initBackendContext(cmd, args); err != nil {
242+ PersistentPreRunE: func(c *cobra.Command, args []string) error {
243+ logger := log.FromContext(c.Context())
244+ if err := cmd.InitBackendContext(c, args); err != nil {
245 logger.Error("failed to initialize backend context", "err", err)
246 return ErrInternalServerError
247 }
248
249 return nil
250 },
251- PersistentPostRunE: func(cmd *cobra.Command, args []string) error {
252- logger := log.FromContext(cmd.Context())
253- if err := closeDBContext(cmd, args); err != nil {
254+ PersistentPostRunE: func(c *cobra.Command, args []string) error {
255+ logger := log.FromContext(c.Context())
256+ if err := cmd.CloseDBContext(c, args); err != nil {
257 logger.Error("failed to close backend", "err", err)
258 return ErrInternalServerError
259 }
260@@ -147,8 +149,8 @@ var (
261 )
262
263 func init() {
264- hookCmd.PersistentFlags().StringVar(&configPath, "config", "", "path to config file (deprecated)")
265- hookCmd.AddCommand(
266+ Command.PersistentFlags().StringVar(&configPath, "config", "", "path to config file (deprecated)")
267+ Command.AddCommand(
268 preReceiveCmd,
269 updateCmd,
270 postReceiveCmd,
271@@ -163,47 +165,3 @@ func runCommand(ctx context.Context, in io.Reader, out io.Writer, err io.Writer,
272 cmd.Stderr = err
273 return cmd.Run()
274 }
275-
276-const updateHookExample = `#!/bin/sh
277-#
278-# An example hook script to echo information about the push
279-# and send it to the client.
280-#
281-# To enable this hook, rename this file to "update" and make it executable.
282-
283-refname="$1"
284-oldrev="$2"
285-newrev="$3"
286-
287-# Safety check
288-if [ -z "$GIT_DIR" ]; then
289- echo "Don't run this script from the command line." >&2
290- echo " (if you want, you could supply GIT_DIR then run" >&2
291- echo " $0 <ref> <oldrev> <newrev>)" >&2
292- exit 1
293-fi
294-
295-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
296- echo "usage: $0 <ref> <oldrev> <newrev>" >&2
297- exit 1
298-fi
299-
300-# Check types
301-# if $newrev is 0000...0000, it's a commit to delete a ref.
302-zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
303-if [ "$newrev" = "$zero" ]; then
304- newrev_type=delete
305-else
306- newrev_type=$(git cat-file -t $newrev)
307-fi
308diff --git a/cmd/soft/root.go b/cmd/soft/main.go
309rename from cmd/soft/root.go
310rename to cmd/soft/main.go
311index c47a81f7e35abfcc05f65fd8fec25576d1ed4d19..8264abee8666d1d7424a3139be750a601f5d7f7b 100644
312--- a/cmd/soft/root.go
313+++ b/cmd/soft/main.go
314@@ -2,20 +2,20 @@ package main
315
316 import (
317 "context"
318- "errors"
319 "fmt"
320- "io/fs"
321 "os"
322 "runtime/debug"
323
324 "github.com/charmbracelet/log"
325- "github.com/charmbracelet/soft-serve/server/backend"
326- "github.com/charmbracelet/soft-serve/server/config"
327- "github.com/charmbracelet/soft-serve/server/db"
328- logr "github.com/charmbracelet/soft-serve/server/log"
329- "github.com/charmbracelet/soft-serve/server/store"
330- "github.com/charmbracelet/soft-serve/server/store/database"
331- "github.com/charmbracelet/soft-serve/server/version"
332+ "github.com/charmbracelet/soft-serve/cmd/soft/admin"
333+ "github.com/charmbracelet/soft-serve/cmd/soft/browse"
334+ "github.com/charmbracelet/soft-serve/cmd/soft/hook"
335+ "github.com/charmbracelet/soft-serve/cmd/soft/serve"
336+ "github.com/charmbracelet/soft-serve/pkg/config"
337+ logr "github.com/charmbracelet/soft-serve/pkg/log"
338+ "github.com/charmbracelet/soft-serve/pkg/version"
339+ mcobra "github.com/muesli/mango-cobra"
340+ "github.com/muesli/roff"
341 "github.com/spf13/cobra"
342 "go.uber.org/automaxprocs/maxprocs"
343 )
344@@ -39,18 +39,36 @@ var (
345 Long: "Soft Serve is a self-hostable Git server for the command line.",
346 SilenceUsage: true,
347 RunE: func(cmd *cobra.Command, args []string) error {
348- return browseCmd.RunE(cmd, args)
349+ return browse.Command.RunE(cmd, args)
350+ },
351+ }
352+
353+ manCmd = &cobra.Command{
354+ Use: "man",
355+ Short: "Generate man pages",
356+ Args: cobra.NoArgs,
357+ Hidden: true,
358+ RunE: func(_ *cobra.Command, _ []string) error {
359+ manPage, err := mcobra.NewManPage(1, rootCmd) //.
360+ if err != nil {
361+ return err
362+ }
363+
364+ manPage = manPage.WithSection("Copyright", "(C) 2021-2023 Charmbracelet, Inc.\n"+
365+ "Released under MIT license.")
366+ fmt.Println(manPage.Build(roff.NewDocument()))
367+ return nil
368 },
369 }
370 )
371
372 func init() {
373 rootCmd.AddCommand(
374- serveCmd,
375 manCmd,
376- hookCmd,
377- migrateConfig,
378- adminCmd,
379+ serve.Command,
380+ hook.Command,
381+ admin.Command,
382+ browse.Command,
383 )
384 rootCmd.CompletionOptions.HiddenDefaultCmd = true
385
386@@ -114,39 +132,3 @@ func main() {
387 os.Exit(1)
388 }
389 }
390-
391-func initBackendContext(cmd *cobra.Command, _ []string) error {
392- ctx := cmd.Context()
393- cfg := config.FromContext(ctx)
394- if _, err := os.Stat(cfg.DataPath); errors.Is(err, fs.ErrNotExist) {
395- if err := os.MkdirAll(cfg.DataPath, os.ModePerm); err != nil {
396- return fmt.Errorf("create data directory: %w", err)
397- }
398- }
399- dbx, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)
400- if err != nil {
401- return fmt.Errorf("open database: %w", err)
402- }
403-
404- ctx = db.WithContext(ctx, dbx)
405- dbstore := database.New(ctx, dbx)
406- ctx = store.WithContext(ctx, dbstore)
407- be := backend.New(ctx, cfg, dbx)
408- ctx = backend.WithContext(ctx, be)
409-
410- cmd.SetContext(ctx)
411-
412- return nil
413-}
414diff --git a/cmd/soft/man.go b/cmd/soft/man.go
415deleted file mode 100644
416index 966fe27d349ae11d407ba618dc6d647218ecc692..0000000000000000000000000000000000000000
417--- a/cmd/soft/man.go
418+++ /dev/null
419@@ -1,27 +0,0 @@
420-package main
421-
422-import (
423- "fmt"
424-
425- mcobra "github.com/muesli/mango-cobra"
426- "github.com/muesli/roff"
427- "github.com/spf13/cobra"
428-)
429-
430-var manCmd = &cobra.Command{
431- Use: "man",
432- Short: "Generate man pages",
433- Args: cobra.NoArgs,
434- Hidden: true,
435- RunE: func(_ *cobra.Command, _ []string) error {
436- manPage, err := mcobra.NewManPage(1, rootCmd) //.
437- if err != nil {
438- return err
439- }
440-
441- manPage = manPage.WithSection("Copyright", "(C) 2021-2023 Charmbracelet, Inc.\n"+
442- "Released under MIT license.")
443- fmt.Println(manPage.Build(roff.NewDocument()))
444- return nil
445- },
446-}
447diff --git a/cmd/soft/migrate_config.go b/cmd/soft/migrate_config.go
448deleted file mode 100644
449index 5138e93c0e8195d7dc328d4dc830abdfa1afce63..0000000000000000000000000000000000000000
450--- a/cmd/soft/migrate_config.go
451+++ /dev/null
452@@ -1,434 +0,0 @@
453-package main
454-
455-import (
456- "encoding/json"
457- "errors"
458- "fmt"
459- "io"
460- "os"
461- "path/filepath"
462- "strings"
463- "time"
464-
465- "github.com/charmbracelet/log"
466- "github.com/charmbracelet/soft-serve/git"
467- "github.com/charmbracelet/soft-serve/server/access"
468- "github.com/charmbracelet/soft-serve/server/backend"
469- "github.com/charmbracelet/soft-serve/server/config"
470- "github.com/charmbracelet/soft-serve/server/db"
471- "github.com/charmbracelet/soft-serve/server/proto"
472- "github.com/charmbracelet/soft-serve/server/sshutils"
473- "github.com/charmbracelet/soft-serve/server/utils"
474- gitm "github.com/gogs/git-module"
475- "github.com/spf13/cobra"
476- "golang.org/x/crypto/ssh"
477- "gopkg.in/yaml.v3"
478-)
479-
480-// Deprecated: will be removed in a future release.
481-var migrateConfig = &cobra.Command{
482- Use: "migrate-config",
483- Short: "Migrate config to new format",
484- Hidden: true,
485- RunE: func(cmd *cobra.Command, _ []string) error {
486- ctx := cmd.Context()
487-
488- logger := log.FromContext(ctx)
489- // Disable logging timestamp
490- logger.SetReportTimestamp(false)
491-
492- keyPath := os.Getenv("SOFT_SERVE_KEY_PATH")
493- reposPath := os.Getenv("SOFT_SERVE_REPO_PATH")
494- bindAddr := os.Getenv("SOFT_SERVE_BIND_ADDRESS")
495- cfg := config.DefaultConfig()
496- if err := cfg.ParseEnv(); err != nil {
497- return fmt.Errorf("parse env: %w", err)
498- }
499-
500- ctx = config.WithContext(ctx, cfg)
501- db, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)
502- if err != nil {
503- return fmt.Errorf("open database: %w", err)
504- }
505-
506- defer db.Close() // nolint: errcheck
507- sb := backend.New(ctx, cfg, db)
508-
509- // FIXME: Admin user gets created when the database is created.
510- sb.DeleteUser(ctx, "admin") // nolint: errcheck
511-
512- // Set SSH listen address
513- logger.Info("Setting SSH listen address...")
514- if bindAddr != "" {
515- cfg.SSH.ListenAddr = bindAddr
516- }
517-
518- // Copy SSH host key
519- logger.Info("Copying SSH host key...")
520- if keyPath != "" {
521- if err := os.MkdirAll(filepath.Join(cfg.DataPath, "ssh"), os.ModePerm); err != nil {
522- return fmt.Errorf("failed to create ssh directory: %w", err)
523- }
524-
525- if err := copyFile(keyPath, filepath.Join(cfg.DataPath, "ssh", filepath.Base(keyPath))); err != nil {
526- return fmt.Errorf("failed to copy ssh key: %w", err)
527- }
528-
529- if err := copyFile(keyPath+".pub", filepath.Join(cfg.DataPath, "ssh", filepath.Base(keyPath))+".pub"); err != nil {
530- logger.Errorf("failed to copy ssh key: %s", err)
531- }
532-
533- cfg.SSH.KeyPath = filepath.Join(cfg.DataPath, "ssh", filepath.Base(keyPath))
534- }
535-
536- // Read config
537- logger.Info("Reading config repository...")
538- r, err := git.Open(filepath.Join(reposPath, "config"))
539- if err != nil {
540- return fmt.Errorf("failed to open config repo: %w", err)
541- }
542-
543- head, err := r.HEAD()
544- if err != nil {
545- return fmt.Errorf("failed to get head: %w", err)
546- }
547-
548- tree, err := r.TreePath(head, "")
549- if err != nil {
550- return fmt.Errorf("failed to get tree: %w", err)
551- }
552diff --git a/cmd/soft/serve.go b/cmd/soft/serve/serve.go
553rename from cmd/soft/serve.go
554rename to cmd/soft/serve/serve.go
555index 0111f311a71a1eb3d48004a52831811b02f7c86c..7f81dcf0f741085ff41f03229a786b76091d0eb5 100644
556--- a/cmd/soft/serve.go
557+++ b/cmd/soft/serve/serve.go
558@@ -1,4 +1,4 @@
559-package main
560+package serve
561
562 import (
563 "context"
564@@ -9,26 +9,26 @@ import (
565 "syscall"
566 "time"
567
568- "github.com/charmbracelet/soft-serve/server"
569- "github.com/charmbracelet/soft-serve/server/backend"
570- "github.com/charmbracelet/soft-serve/server/config"
571- "github.com/charmbracelet/soft-serve/server/db"
572- "github.com/charmbracelet/soft-serve/server/db/migrate"
573- "github.com/charmbracelet/soft-serve/server/hooks"
574+ "github.com/charmbracelet/soft-serve/cmd"
575+ "github.com/charmbracelet/soft-serve/pkg/backend"
576+ "github.com/charmbracelet/soft-serve/pkg/config"
577+ "github.com/charmbracelet/soft-serve/pkg/db"
578+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
579 "github.com/spf13/cobra"
580 )
581
582 var (
583 syncHooks bool
584
585- serveCmd = &cobra.Command{
586+ // Command is the serve command.
587+ Command = &cobra.Command{
588 Use: "serve",
589 Short: "Start the server",
590 Args: cobra.NoArgs,
591- PersistentPreRunE: initBackendContext,
592- PersistentPostRunE: closeDBContext,
593- RunE: func(cmd *cobra.Command, _ []string) error {
594- ctx := cmd.Context()
595+ PersistentPreRunE: cmd.InitBackendContext,
596+ PersistentPostRunE: cmd.CloseDBContext,
597+ RunE: func(c *cobra.Command, _ []string) error {
598+ ctx := c.Context()
599 cfg := config.DefaultConfig()
600 if cfg.Exist() {
601 if err := cfg.ParseFile(); err != nil {
602@@ -67,14 +67,14 @@ var (
603 return fmt.Errorf("migration error: %w", err)
604 }
605
606- s, err := server.NewServer(ctx)
607+ s, err := NewServer(ctx)
608 if err != nil {
609 return fmt.Errorf("start server: %w", err)
610 }
611
612 if syncHooks {
613 be := backend.FromContext(ctx)
614- if err := initializeHooks(ctx, cfg, be); err != nil {
615+ if err := cmd.InitializeHooks(ctx, cfg, be); err != nil {
616 return fmt.Errorf("initialize hooks: %w", err)
617 }
618 }
619@@ -103,20 +103,49 @@ var (
620 )
621
622 func init() {
623- serveCmd.Flags().BoolVarP(&syncHooks, "sync-hooks", "", false, "synchronize hooks for all repositories before running the server")
624+ Command.Flags().BoolVarP(&syncHooks, "sync-hooks", "", false, "synchronize hooks for all repositories before running the server")
625 }
626
627-func initializeHooks(ctx context.Context, cfg *config.Config, be *backend.Backend) error {
628- repos, err := be.Repositories(ctx)
629- if err != nil {
630- return err
631- }
632-
633- for _, repo := range repos {
634- if err := hooks.GenerateHooks(ctx, cfg, repo.Name()); err != nil {
635- return err
636- }
637- }
638-
639- return nil
640-}
641+const updateHookExample = `#!/bin/sh
642+#
643+# An example hook script to echo information about the push
644+# and send it to the client.
645+#
646+# To enable this hook, rename this file to "update" and make it executable.
647+
648+refname="$1"
649+oldrev="$2"
650+newrev="$3"
651+
652+# Safety check
653+if [ -z "$GIT_DIR" ]; then
654+ echo "Don't run this script from the command line." >&2
655+ echo " (if you want, you could supply GIT_DIR then run" >&2
656+ echo " $0 <ref> <oldrev> <newrev>)" >&2
657+ exit 1
658diff --git a/server/server.go b/cmd/soft/serve/server.go
659rename from server/server.go
660rename to cmd/soft/serve/server.go
661index 71f796522ecea1169f311ff7bef573e2fbac313e..223e55a69fb5c907feda0b1bb3f657a0216cb2de 100644
662--- a/server/server.go
663+++ b/cmd/soft/serve/server.go
664@@ -1,4 +1,4 @@
665-package server
666+package serve
667
668 import (
669 "context"
670@@ -8,15 +8,15 @@ import (
671
672 "github.com/charmbracelet/log"
673
674- "github.com/charmbracelet/soft-serve/server/backend"
675- "github.com/charmbracelet/soft-serve/server/config"
676- "github.com/charmbracelet/soft-serve/server/cron"
677- "github.com/charmbracelet/soft-serve/server/daemon"
678- "github.com/charmbracelet/soft-serve/server/db"
679- "github.com/charmbracelet/soft-serve/server/jobs"
680- sshsrv "github.com/charmbracelet/soft-serve/server/ssh"
681- "github.com/charmbracelet/soft-serve/server/stats"
682- "github.com/charmbracelet/soft-serve/server/web"
683+ "github.com/charmbracelet/soft-serve/pkg/backend"
684+ "github.com/charmbracelet/soft-serve/pkg/config"
685+ "github.com/charmbracelet/soft-serve/pkg/cron"
686+ "github.com/charmbracelet/soft-serve/pkg/daemon"
687+ "github.com/charmbracelet/soft-serve/pkg/db"
688+ "github.com/charmbracelet/soft-serve/pkg/jobs"
689+ sshsrv "github.com/charmbracelet/soft-serve/pkg/ssh"
690+ "github.com/charmbracelet/soft-serve/pkg/stats"
691+ "github.com/charmbracelet/soft-serve/pkg/web"
692 "github.com/charmbracelet/ssh"
693 "golang.org/x/sync/errgroup"
694 )
695diff --git a/server/access/access.go b/pkg/access/access.go
696rename from server/access/access.go
697rename to pkg/access/access.go
698diff --git a/server/access/access_test.go b/pkg/access/access_test.go
699rename from server/access/access_test.go
700rename to pkg/access/access_test.go
701diff --git a/server/access/context.go b/pkg/access/context.go
702rename from server/access/context.go
703rename to pkg/access/context.go
704diff --git a/server/backend/access_token.go b/pkg/backend/access_token.go
705rename from server/backend/access_token.go
706rename to pkg/backend/access_token.go
707index bff3b25ba10474fb2f33b1ee6b1d5230124b566b..281ad8f174a1c67896594485c1958820fd2ac668 100644
708--- a/server/backend/access_token.go
709+++ b/pkg/backend/access_token.go
710@@ -5,8 +5,8 @@ import (
711 "errors"
712 "time"
713
714- "github.com/charmbracelet/soft-serve/server/db"
715- "github.com/charmbracelet/soft-serve/server/proto"
716+ "github.com/charmbracelet/soft-serve/pkg/db"
717+ "github.com/charmbracelet/soft-serve/pkg/proto"
718 )
719
720 // CreateAccessToken creates an access token for user.
721diff --git a/server/backend/auth.go b/pkg/backend/auth.go
722rename from server/backend/auth.go
723rename to pkg/backend/auth.go
724diff --git a/server/backend/auth_test.go b/pkg/backend/auth_test.go
725rename from server/backend/auth_test.go
726rename to pkg/backend/auth_test.go
727diff --git a/server/backend/backend.go b/pkg/backend/backend.go
728rename from server/backend/backend.go
729rename to pkg/backend/backend.go
730index ba9ad61d3713dd18f72a8a9e91d989ddcc370fe1..2d9eb2a05538e7a2ffa5ebc568f14d5e610f39f9 100644
731--- a/server/backend/backend.go
732+++ b/pkg/backend/backend.go
733@@ -4,10 +4,10 @@ import (
734 "context"
735
736 "github.com/charmbracelet/log"
737- "github.com/charmbracelet/soft-serve/server/config"
738- "github.com/charmbracelet/soft-serve/server/db"
739- "github.com/charmbracelet/soft-serve/server/store"
740- "github.com/charmbracelet/soft-serve/server/task"
741+ "github.com/charmbracelet/soft-serve/pkg/config"
742+ "github.com/charmbracelet/soft-serve/pkg/db"
743+ "github.com/charmbracelet/soft-serve/pkg/store"
744+ "github.com/charmbracelet/soft-serve/pkg/task"
745 )
746
747 // Backend is the Soft Serve backend that handles users, repositories, and
748diff --git a/server/backend/cache.go b/pkg/backend/cache.go
749rename from server/backend/cache.go
750rename to pkg/backend/cache.go
751diff --git a/server/backend/collab.go b/pkg/backend/collab.go
752rename from server/backend/collab.go
753rename to pkg/backend/collab.go
754index 6b03c5d0e038ce03e37d838ec5f6b3a83c75f1a9..c9635ae3712b50c160c9455c31bb510a04bfaac6 100644
755--- a/server/backend/collab.go
756+++ b/pkg/backend/collab.go
757@@ -5,12 +5,12 @@ import (
758 "errors"
759 "strings"
760
761- "github.com/charmbracelet/soft-serve/server/access"
762- "github.com/charmbracelet/soft-serve/server/db"
763- "github.com/charmbracelet/soft-serve/server/db/models"
764- "github.com/charmbracelet/soft-serve/server/proto"
765- "github.com/charmbracelet/soft-serve/server/utils"
766- "github.com/charmbracelet/soft-serve/server/webhook"
767+ "github.com/charmbracelet/soft-serve/pkg/access"
768+ "github.com/charmbracelet/soft-serve/pkg/db"
769+ "github.com/charmbracelet/soft-serve/pkg/db/models"
770+ "github.com/charmbracelet/soft-serve/pkg/proto"
771+ "github.com/charmbracelet/soft-serve/pkg/utils"
772+ "github.com/charmbracelet/soft-serve/pkg/webhook"
773 )
774
775 // AddCollaborator adds a collaborator to a repository.
776diff --git a/server/backend/context.go b/pkg/backend/context.go
777rename from server/backend/context.go
778rename to pkg/backend/context.go
779diff --git a/server/backend/hooks.go b/pkg/backend/hooks.go
780rename from server/backend/hooks.go
781rename to pkg/backend/hooks.go
782index 3e5297eb953e0ecab5d790e930254d0939905d25..f6c64467100ac3f3eddb5e8384a787b6b7008c44 100644
783--- a/server/backend/hooks.go
784+++ b/pkg/backend/hooks.go
785@@ -7,10 +7,10 @@ import (
786 "sync"
787
788 "github.com/charmbracelet/soft-serve/git"
789- "github.com/charmbracelet/soft-serve/server/hooks"
790- "github.com/charmbracelet/soft-serve/server/proto"
791- "github.com/charmbracelet/soft-serve/server/sshutils"
792- "github.com/charmbracelet/soft-serve/server/webhook"
793+ "github.com/charmbracelet/soft-serve/pkg/hooks"
794+ "github.com/charmbracelet/soft-serve/pkg/proto"
795+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
796+ "github.com/charmbracelet/soft-serve/pkg/webhook"
797 )
798
799 var _ hooks.Hooks = (*Backend)(nil)
800diff --git a/server/backend/lfs.go b/pkg/backend/lfs.go
801rename from server/backend/lfs.go
802rename to pkg/backend/lfs.go
803index 5b0d5a4064ae92d3fe1044ef8a841bbb8e9663a1..b940940bd5c81ebc4f564c054e8a7bff8ed38617 100644
804--- a/server/backend/lfs.go
805+++ b/pkg/backend/lfs.go
806@@ -8,12 +8,12 @@ import (
807 "path/filepath"
808 "strconv"
809
810- "github.com/charmbracelet/soft-serve/server/config"
811- "github.com/charmbracelet/soft-serve/server/db"
812- "github.com/charmbracelet/soft-serve/server/lfs"
813- "github.com/charmbracelet/soft-serve/server/proto"
814- "github.com/charmbracelet/soft-serve/server/storage"
815- "github.com/charmbracelet/soft-serve/server/store"
816+ "github.com/charmbracelet/soft-serve/pkg/config"
817+ "github.com/charmbracelet/soft-serve/pkg/db"
818+ "github.com/charmbracelet/soft-serve/pkg/lfs"
819+ "github.com/charmbracelet/soft-serve/pkg/proto"
820+ "github.com/charmbracelet/soft-serve/pkg/storage"
821+ "github.com/charmbracelet/soft-serve/pkg/store"
822 )
823
824 // StoreRepoMissingLFSObjects stores missing LFS objects for a repository.
825diff --git a/server/backend/repo.go b/pkg/backend/repo.go
826rename from server/backend/repo.go
827rename to pkg/backend/repo.go
828index 2a8a8d1be6b13eb3646162255fcd6435f94afaf1..231d94e6f787b779536bf2db0f53817dc53c4f8b 100644
829--- a/server/backend/repo.go
830+++ b/pkg/backend/repo.go
831@@ -13,15 +13,15 @@ import (
832 "time"
833
834 "github.com/charmbracelet/soft-serve/git"
835- "github.com/charmbracelet/soft-serve/server/db"
836- "github.com/charmbracelet/soft-serve/server/db/models"
837- "github.com/charmbracelet/soft-serve/server/hooks"
838- "github.com/charmbracelet/soft-serve/server/lfs"
839- "github.com/charmbracelet/soft-serve/server/proto"
840- "github.com/charmbracelet/soft-serve/server/storage"
841- "github.com/charmbracelet/soft-serve/server/task"
842- "github.com/charmbracelet/soft-serve/server/utils"
843- "github.com/charmbracelet/soft-serve/server/webhook"
844+ "github.com/charmbracelet/soft-serve/pkg/db"
845+ "github.com/charmbracelet/soft-serve/pkg/db/models"
846+ "github.com/charmbracelet/soft-serve/pkg/hooks"
847+ "github.com/charmbracelet/soft-serve/pkg/lfs"
848+ "github.com/charmbracelet/soft-serve/pkg/proto"
849+ "github.com/charmbracelet/soft-serve/pkg/storage"
850+ "github.com/charmbracelet/soft-serve/pkg/task"
851+ "github.com/charmbracelet/soft-serve/pkg/utils"
852+ "github.com/charmbracelet/soft-serve/pkg/webhook"
853 )
854
855 func (d *Backend) reposPath() string {
856diff --git a/server/backend/settings.go b/pkg/backend/settings.go
857rename from server/backend/settings.go
858rename to pkg/backend/settings.go
859index 0879aa38d0b23aec92348ec877a4b69657b71320..3b7ddbf186e3450747d67475e536b8c296545a32 100644
860--- a/server/backend/settings.go
861+++ b/pkg/backend/settings.go
862@@ -3,8 +3,8 @@ package backend
863 import (
864 "context"
865
866- "github.com/charmbracelet/soft-serve/server/access"
867- "github.com/charmbracelet/soft-serve/server/db"
868+ "github.com/charmbracelet/soft-serve/pkg/access"
869+ "github.com/charmbracelet/soft-serve/pkg/db"
870 )
871
872 // AllowKeyless returns whether or not keyless access is allowed.
873diff --git a/server/backend/user.go b/pkg/backend/user.go
874rename from server/backend/user.go
875rename to pkg/backend/user.go
876index d5cf38ca329af86bc2e4487c66abf5990e644aa9..75423048d681a84fcc656e4ba000d26aaab25a50 100644
877--- a/server/backend/user.go
878+++ b/pkg/backend/user.go
879@@ -6,12 +6,12 @@ import (
880 "strings"
881 "time"
882
883- "github.com/charmbracelet/soft-serve/server/access"
884- "github.com/charmbracelet/soft-serve/server/db"
885- "github.com/charmbracelet/soft-serve/server/db/models"
886- "github.com/charmbracelet/soft-serve/server/proto"
887- "github.com/charmbracelet/soft-serve/server/sshutils"
888- "github.com/charmbracelet/soft-serve/server/utils"
889+ "github.com/charmbracelet/soft-serve/pkg/access"
890+ "github.com/charmbracelet/soft-serve/pkg/db"
891+ "github.com/charmbracelet/soft-serve/pkg/db/models"
892+ "github.com/charmbracelet/soft-serve/pkg/proto"
893+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
894+ "github.com/charmbracelet/soft-serve/pkg/utils"
895 "golang.org/x/crypto/ssh"
896 )
897
898diff --git a/server/backend/utils.go b/pkg/backend/utils.go
899rename from server/backend/utils.go
900rename to pkg/backend/utils.go
901index 5e90873e5369615c3fb8eb62ef347995770bd9ae..be1b0b4a78cfd21265ebb809920a8d5a780f6825 100644
902--- a/server/backend/utils.go
903+++ b/pkg/backend/utils.go
904@@ -2,7 +2,7 @@ package backend
905
906 import (
907 "github.com/charmbracelet/soft-serve/git"
908- "github.com/charmbracelet/soft-serve/server/proto"
909+ "github.com/charmbracelet/soft-serve/pkg/proto"
910 )
911
912 // LatestFile returns the contents of the latest file at the specified path in
913diff --git a/server/backend/webhooks.go b/pkg/backend/webhooks.go
914rename from server/backend/webhooks.go
915rename to pkg/backend/webhooks.go
916index 6d676d35655f62a69bc1497191b2eea4c3d59ef6..78126b2ee84e8f49c93cba422af3c7e588f62195 100644
917--- a/server/backend/webhooks.go
918+++ b/pkg/backend/webhooks.go
919@@ -5,11 +5,11 @@ import (
920 "encoding/json"
921
922 "github.com/charmbracelet/log"
923- "github.com/charmbracelet/soft-serve/server/db"
924- "github.com/charmbracelet/soft-serve/server/db/models"
925- "github.com/charmbracelet/soft-serve/server/proto"
926- "github.com/charmbracelet/soft-serve/server/store"
927- "github.com/charmbracelet/soft-serve/server/webhook"
928+ "github.com/charmbracelet/soft-serve/pkg/db"
929+ "github.com/charmbracelet/soft-serve/pkg/db/models"
930+ "github.com/charmbracelet/soft-serve/pkg/proto"
931+ "github.com/charmbracelet/soft-serve/pkg/store"
932+ "github.com/charmbracelet/soft-serve/pkg/webhook"
933 "github.com/google/uuid"
934 )
935
936diff --git a/server/config/config.go b/pkg/config/config.go
937rename from server/config/config.go
938rename to pkg/config/config.go
939index 4707cc452befbbb27a28e92485e3e03a6ba49924..e1124204faebef4e42f5ca53a1d965641dc48c9b 100644
940--- a/server/config/config.go
941+++ b/pkg/config/config.go
942@@ -9,7 +9,7 @@ import (
943 "time"
944
945 "github.com/caarlos0/env/v8"
946- "github.com/charmbracelet/soft-serve/server/sshutils"
947+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
948 "golang.org/x/crypto/ssh"
949 "gopkg.in/yaml.v3"
950 )
951diff --git a/server/config/config_test.go b/pkg/config/config_test.go
952rename from server/config/config_test.go
953rename to pkg/config/config_test.go
954diff --git a/server/config/context.go b/pkg/config/context.go
955rename from server/config/context.go
956rename to pkg/config/context.go
957diff --git a/server/config/file.go b/pkg/config/file.go
958rename from server/config/file.go
959rename to pkg/config/file.go
960diff --git a/server/config/ssh.go b/pkg/config/ssh.go
961rename from server/config/ssh.go
962rename to pkg/config/ssh.go
963diff --git a/server/config/testdata/k1.pub b/pkg/config/testdata/k1.pub
964rename from server/config/testdata/k1.pub
965rename to pkg/config/testdata/k1.pub
966diff --git a/server/cron/cron.go b/pkg/cron/cron.go
967rename from server/cron/cron.go
968rename to pkg/cron/cron.go
969diff --git a/server/daemon/conn.go b/pkg/daemon/conn.go
970rename from server/daemon/conn.go
971rename to pkg/daemon/conn.go
972diff --git a/server/daemon/daemon.go b/pkg/daemon/daemon.go
973rename from server/daemon/daemon.go
974rename to pkg/daemon/daemon.go
975index 1a6070abc70af43e1f8281a7f1563c9b428093b8..eee10ec525754cd7007fd9c77b71ac833e7b8bc4 100644
976--- a/server/daemon/daemon.go
977+++ b/pkg/daemon/daemon.go
978@@ -11,11 +11,11 @@ import (
979 "time"
980
981 "github.com/charmbracelet/log"
982- "github.com/charmbracelet/soft-serve/server/access"
983- "github.com/charmbracelet/soft-serve/server/backend"
984- "github.com/charmbracelet/soft-serve/server/config"
985- "github.com/charmbracelet/soft-serve/server/git"
986- "github.com/charmbracelet/soft-serve/server/utils"
987+ "github.com/charmbracelet/soft-serve/pkg/access"
988+ "github.com/charmbracelet/soft-serve/pkg/backend"
989+ "github.com/charmbracelet/soft-serve/pkg/config"
990+ "github.com/charmbracelet/soft-serve/pkg/git"
991+ "github.com/charmbracelet/soft-serve/pkg/utils"
992 "github.com/go-git/go-git/v5/plumbing/format/pktline"
993 "github.com/prometheus/client_golang/prometheus"
994 "github.com/prometheus/client_golang/prometheus/promauto"
995diff --git a/server/daemon/daemon_test.go b/pkg/daemon/daemon_test.go
996rename from server/daemon/daemon_test.go
997rename to pkg/daemon/daemon_test.go
998index 0592db2de732c03cb048e16b5c48640dd7c2ce8b..a8710513eedbe3db6a3f40fd41efce599ddbd2cf 100644
999--- a/server/daemon/daemon_test.go
1000+++ b/pkg/daemon/daemon_test.go
1001@@ -12,14 +12,14 @@ import (
1002 "strings"
1003 "testing"
1004
1005- "github.com/charmbracelet/soft-serve/server/backend"
1006- "github.com/charmbracelet/soft-serve/server/config"
1007- "github.com/charmbracelet/soft-serve/server/db"
1008- "github.com/charmbracelet/soft-serve/server/db/migrate"
1009- "github.com/charmbracelet/soft-serve/server/git"
1010- "github.com/charmbracelet/soft-serve/server/store"
1011- "github.com/charmbracelet/soft-serve/server/store/database"
1012- "github.com/charmbracelet/soft-serve/server/test"
1013+ "github.com/charmbracelet/soft-serve/pkg/backend"
1014+ "github.com/charmbracelet/soft-serve/pkg/config"
1015+ "github.com/charmbracelet/soft-serve/pkg/db"
1016+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
1017+ "github.com/charmbracelet/soft-serve/pkg/git"
1018+ "github.com/charmbracelet/soft-serve/pkg/store"
1019+ "github.com/charmbracelet/soft-serve/pkg/store/database"
1020+ "github.com/charmbracelet/soft-serve/pkg/test"
1021 "github.com/go-git/go-git/v5/plumbing/format/pktline"
1022 _ "modernc.org/sqlite" // sqlite driver
1023 )
1024diff --git a/server/db/context.go b/pkg/db/context.go
1025rename from server/db/context.go
1026rename to pkg/db/context.go
1027diff --git a/server/db/db.go b/pkg/db/db.go
1028rename from server/db/db.go
1029rename to pkg/db/db.go
1030index ae0bfcaae645591161dcf2bc7fc10bbf946bb6ba..968d0425afeb65cf7a62d6ebc6c406922178f692 100644
1031--- a/server/db/db.go
1032+++ b/pkg/db/db.go
1033@@ -7,7 +7,7 @@ import (
1034 "fmt"
1035
1036 "github.com/charmbracelet/log"
1037- "github.com/charmbracelet/soft-serve/server/config"
1038+ "github.com/charmbracelet/soft-serve/pkg/config"
1039 "github.com/jmoiron/sqlx"
1040 _ "github.com/lib/pq" // postgres driver
1041 _ "modernc.org/sqlite" // sqlite driver
1042diff --git a/server/db/errors.go b/pkg/db/errors.go
1043rename from server/db/errors.go
1044rename to pkg/db/errors.go
1045diff --git a/server/db/handler.go b/pkg/db/handler.go
1046rename from server/db/handler.go
1047rename to pkg/db/handler.go
1048diff --git a/server/db/logger.go b/pkg/db/logger.go
1049rename from server/db/logger.go
1050rename to pkg/db/logger.go
1051diff --git a/server/db/migrate/0001_create_tables.go b/pkg/db/migrate/0001_create_tables.go
1052rename from server/db/migrate/0001_create_tables.go
1053rename to pkg/db/migrate/0001_create_tables.go
1054index d1cadd4d4bf3e517e8912d76cb1997c7de2b4430..8491328c04c5e979f60321071445991a39c45916 100644
1055--- a/server/db/migrate/0001_create_tables.go
1056+++ b/pkg/db/migrate/0001_create_tables.go
1057@@ -6,10 +6,10 @@ import (
1058 "fmt"
1059 "strconv"
1060
1061- "github.com/charmbracelet/soft-serve/server/access"
1062- "github.com/charmbracelet/soft-serve/server/config"
1063- "github.com/charmbracelet/soft-serve/server/db"
1064- "github.com/charmbracelet/soft-serve/server/sshutils"
1065+ "github.com/charmbracelet/soft-serve/pkg/access"
1066+ "github.com/charmbracelet/soft-serve/pkg/config"
1067+ "github.com/charmbracelet/soft-serve/pkg/db"
1068+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
1069 )
1070
1071 const (
1072diff --git a/server/db/migrate/0001_create_tables_postgres.down.sql b/pkg/db/migrate/0001_create_tables_postgres.down.sql
1073rename from server/db/migrate/0001_create_tables_postgres.down.sql
1074rename to pkg/db/migrate/0001_create_tables_postgres.down.sql
1075diff --git a/server/db/migrate/0001_create_tables_postgres.up.sql b/pkg/db/migrate/0001_create_tables_postgres.up.sql
1076rename from server/db/migrate/0001_create_tables_postgres.up.sql
1077rename to pkg/db/migrate/0001_create_tables_postgres.up.sql
1078diff --git a/server/db/migrate/0001_create_tables_sqlite.down.sql b/pkg/db/migrate/0001_create_tables_sqlite.down.sql
1079rename from server/db/migrate/0001_create_tables_sqlite.down.sql
1080rename to pkg/db/migrate/0001_create_tables_sqlite.down.sql
1081diff --git a/server/db/migrate/0001_create_tables_sqlite.up.sql b/pkg/db/migrate/0001_create_tables_sqlite.up.sql
1082rename from server/db/migrate/0001_create_tables_sqlite.up.sql
1083rename to pkg/db/migrate/0001_create_tables_sqlite.up.sql
1084diff --git a/server/db/migrate/0002_webhooks.go b/pkg/db/migrate/0002_webhooks.go
1085rename from server/db/migrate/0002_webhooks.go
1086rename to pkg/db/migrate/0002_webhooks.go
1087index 7ad37be61cc2d396a9ba1c57637c6ae461e1a93f..a525f6edc76add5b8402b362b9191ed70c851bd1 100644
1088--- a/server/db/migrate/0002_webhooks.go
1089+++ b/pkg/db/migrate/0002_webhooks.go
1090@@ -3,7 +3,7 @@ package migrate
1091 import (
1092 "context"
1093
1094- "github.com/charmbracelet/soft-serve/server/db"
1095+ "github.com/charmbracelet/soft-serve/pkg/db"
1096 )
1097
1098 const (
1099diff --git a/server/db/migrate/0002_webhooks_postgres.down.sql b/pkg/db/migrate/0002_webhooks_postgres.down.sql
1100rename from server/db/migrate/0002_webhooks_postgres.down.sql
1101rename to pkg/db/migrate/0002_webhooks_postgres.down.sql
1102diff --git a/server/db/migrate/0002_webhooks_postgres.up.sql b/pkg/db/migrate/0002_webhooks_postgres.up.sql
1103rename from server/db/migrate/0002_webhooks_postgres.up.sql
1104rename to pkg/db/migrate/0002_webhooks_postgres.up.sql
1105diff --git a/server/db/migrate/0002_webhooks_sqlite.down.sql b/pkg/db/migrate/0002_webhooks_sqlite.down.sql
1106rename from server/db/migrate/0002_webhooks_sqlite.down.sql
1107rename to pkg/db/migrate/0002_webhooks_sqlite.down.sql