package main import ( "context" "fmt" "log" "net/http" "os" "os/signal" "syscall" "hakurei.app/command" "hakurei.app/container/check" "hakurei.app/internal/pkg" "hakurei.app/internal/rosa" "hakurei.app/message" ) //go:generate sh -c "sass ui/static/dark.scss ui/static/dark.css && sass ui/static/light.scss ui/static/light.css && tsc -p ui/static" func main() { log.SetFlags(0) log.SetPrefix("pkgserver: ") var ( flagBaseDir string flagPort int ) ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) defer stop() msg := message.New(log.Default()) c := command.New(os.Stderr, log.Printf, "pkgserver", func(args []string) error { reportPath := args[0] baseDir, err := check.NewAbs(flagBaseDir) if err != nil { return err } cache, err := pkg.Open(ctx, msg, 0, baseDir) defer cache.Close() if err != nil { return err } report, err := rosa.OpenReport(reportPath) if err != nil { return err } index, err := createPackageIndex(cache, report) if err != nil { return err } uiRoutes() apiRoutes(index, cache) err = http.ListenAndServe(fmt.Sprintf(":%d", flagPort), nil) if err != nil { return err } return nil }).Flag( &flagBaseDir, "b", command.StringFlag(""), "base directory for cache", ).Flag( &flagPort, "p", command.IntFlag(8067), "http listen port", ) c.MustParse(os.Args[1:], func(e error) { log.Fatal(e) }) }