diff options
Diffstat (limited to 'forged/internal/server/server.go')
-rw-r--r-- | forged/internal/server/server.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/forged/internal/server/server.go b/forged/internal/server/server.go new file mode 100644 index 0000000..03570c3 --- /dev/null +++ b/forged/internal/server/server.go @@ -0,0 +1,62 @@ +package server + +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 + hookPool hooki.Pool + lmtpPool lmtp.Pool + templates *template.Template +} + +func New(ctx context.Context, configPath string) (server *Server, err error) { + server = &Server{} + + server.config, err = config.Open(configPath) + if err != nil { + return server, fmt.Errorf("open config: %w", err) + } + + // 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 +} |