clonepack/cmd/clonepack/serve.go
GnomeZworc 274ea454dd
first with full handle over rpm
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2026-04-25 14:50:08 +02:00

60 lines
1.8 KiB
Go

package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"github.com/spf13/cobra"
"github.com/syonad/clonepack/config"
"github.com/syonad/clonepack/internal/api"
"github.com/syonad/clonepack/internal/core"
"github.com/syonad/clonepack/internal/store"
)
var serveCmd = &cobra.Command{
Use: "serve",
Short: "Start the ClonePack HTTP server",
RunE: func(cmd *cobra.Command, args []string) error {
cfg, err := config.Load(cfgFile)
if err != nil {
return fmt.Errorf("load config: %w", err)
}
db, err := store.Open(cfg.DB)
if err != nil {
return fmt.Errorf("open store: %w", err)
}
repoStore := store.NewRepoStore(db)
jobStore := store.NewCloneJobStore(db)
pendingStore := store.NewPendingPackageStore(db)
blockedStore := store.NewBlockedPackageStore(db)
snapshotStore := store.NewSnapshotStore(db)
repoSvc := core.NewRepoService(repoStore, cfg.DataDir)
cloneSvc := core.NewCloneService(repoStore, jobStore, cfg.DataDir)
snapshotSvc := core.NewSnapshotService(snapshotStore, repoStore, cfg.DataDir)
syncSvc := core.NewSyncService(repoStore, pendingStore, blockedStore, cloneSvc, snapshotSvc, cfg.DataDir)
repoH := api.NewRepoHandler(repoSvc)
cloneH := api.NewCloneHandler(cloneSvc)
syncH := api.NewSyncHandler(syncSvc)
snapshotH := api.NewSnapshotHandler(snapshotSvc)
proxyH := api.NewProxyHandler(repoSvc, cfg.DataDir)
router := api.NewRouter(repoH, cloneH, syncH, snapshotH, proxyH)
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer cancel()
syncSvc.StartScheduler(ctx, cfg.Sync.IntervalDuration())
addr := fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port)
log.Printf("ClonePack listening on %s", addr)
return http.ListenAndServe(addr, router)
},
}