Switched to using cobra for better cli support

This commit is contained in:
2026-05-31 17:04:39 -05:00
parent 2e00798d2d
commit 9b665d2df6
5 changed files with 49 additions and 16 deletions
+30 -8
View File
@@ -2,7 +2,7 @@ package main
import (
"context"
"flag"
"fmt"
"log"
"net/http"
"os"
@@ -10,6 +10,8 @@ import (
"syscall"
"time"
"github.com/spf13/cobra"
"scratchbox/internal/cleanup"
"scratchbox/internal/config"
httpapi "scratchbox/internal/http"
@@ -17,24 +19,43 @@ import (
)
func main() {
configPath := flag.String("config", "", "path to config file")
flag.Parse()
cmd := newRootCmd()
if err := cmd.Execute(); err != nil {
log.Fatalf("command failed: %v", err)
}
}
cfg, err := config.Load(*configPath)
func newRootCmd() *cobra.Command {
var configPath string
cmd := &cobra.Command{
Use: "pastebin",
Short: "Run the scratchbox service",
SilenceUsage: true,
RunE: func(_ *cobra.Command, _ []string) error {
return run(configPath)
},
}
cmd.Flags().StringVarP(&configPath, "config", "c", "", "path to config file")
return cmd
}
func run(configPath string) error {
cfg, err := config.Load(configPath)
if err != nil {
log.Fatalf("config load failed: %v", err)
return fmt.Errorf("config load failed: %w", err)
}
logger := log.New(os.Stdout, "[pastebin] ", log.LstdFlags|log.LUTC)
store, err := storage.NewFilesystemStore(cfg.Storage.DataDir)
if err != nil {
logger.Fatalf("storage init failed: %v", err)
return fmt.Errorf("storage init failed: %w", err)
}
server, err := httpapi.NewServer(cfg, store, logger)
if err != nil {
logger.Fatalf("http init failed: %v", err)
return fmt.Errorf("http init failed: %w", err)
}
cleanupWorker := cleanup.NewWorker(store, cfg.Storage.CleanupIntervalParsed, logger)
@@ -60,6 +81,7 @@ func main() {
logger.Printf("listening on %s", cfg.Server.ListenAddr)
if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
logger.Fatalf("http server exited with error: %v", err)
return fmt.Errorf("http server exited with error: %w", err)
}
return nil
}