buildr/internal/cmd/app_server.go
Peter 34c431790e
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is failing
refactor: use connect-go instead of regular Google gRPC
- support binary name for plugins
- register plugins for container jobs
2023-09-12 18:43:34 +02:00

48 lines
1 KiB
Go

package cmd
import (
"context"
"log/slog"
"code.icb4dc0.de/buildr/buildr/internal/rpc"
"code.icb4dc0.de/buildr/buildr/internal/services"
)
var _ ServerCommander = (*ServerApp)(nil)
func NewServerApp(initializer LevelInitializer, accessor services.TypeRegistryAccessor) *ServerApp {
return &ServerApp{
initializer: initializer,
accessor: accessor,
}
}
type ServerApp struct {
initializer LevelInitializer
accessor services.TypeRegistryAccessor
}
func (s *ServerApp) ServeAPI(ctx context.Context, cfg *rpc.GrpcConfig) error {
if err := s.initializer.InitAt(ctx, InitLevelBasic); err != nil {
return err
}
logger := slog.Default()
logger.Info("Starting gRPC server", slog.Group("grpc", slog.String("addr", cfg.Host.Address)))
grpcServer := rpc.NewServer(logger, s.accessor)
go func() {
if err := grpcServer.Start(ctx, cfg.Host.Address); err != nil {
slog.Error("Error occurred while serving gRPC API", slog.String("err", err.Error()))
}
}()
<-ctx.Done()
grpcServer.Close()
return nil
}