diff options
Diffstat (limited to '')
-rw-r--r-- | forged/internal/server/server.go | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/forged/internal/server/server.go b/forged/internal/server/server.go index ec875f1..03570c3 100644 --- a/forged/internal/server/server.go +++ b/forged/internal/server/server.go @@ -4,29 +4,59 @@ import ( "context" "fmt" "html/template" + "log" "go.lindenii.runxiyu.org/forge/forged/internal/config" "go.lindenii.runxiyu.org/forge/forged/internal/database" "go.lindenii.runxiyu.org/forge/forged/internal/hooki" + "go.lindenii.runxiyu.org/forge/forged/internal/lmtp" "go.lindenii.runxiyu.org/forge/forged/internal/store" ) type Server struct { config config.Config - database database.Database - stores *store.Set - hookis *hooki.Pool + database database.Database + stores *store.Set + hookPool hooki.Pool + lmtpPool lmtp.Pool templates *template.Template } -func New(ctx context.Context, config config.Config) (*Server, error) { - database, err := database.Open(ctx, config.DB) +func New(ctx context.Context, configPath string) (server *Server, err error) { + server = &Server{} + + server.config, err = config.Open(configPath) if err != nil { - return nil, fmt.Errorf("open database: %w", err) + return server, fmt.Errorf("open config: %w", err) } - return &Server{ - database: database, - }, nil + // TODO: Should this belong here, or in Run()? + server.database, err = database.Open(ctx, server.config.DB) + if err != nil { + return server, fmt.Errorf("open database: %w", err) + } + + return server, nil +} + +func (s *Server) Run() error { + // TODO: Not running git2d because it should be run separately. + // This needs to be documented somewhere, hence a TODO here for now. + + go func() { + s.hookPool = hooki.New(s.config.Hooks) + if err := s.hookPool.Run(); err != nil { + log.Fatalf("run hook pool: %v", err) + } + }() + + go func() { + s.lmtpPool = lmtp.New(s.config.LMTP) + if err := s.lmtpPool.Run(); err != nil { + log.Fatalf("run LMTP pool: %v", err) + } + }() + + return nil } |