1package main
2
3import (
4 "context"
5 "flag"
6 "fmt"
7 "log"
8 "os"
9 "os/signal"
10 "syscall"
11 "time"
12
13 "github.com/charmbracelet/soft-serve/config"
14 "github.com/charmbracelet/soft-serve/server"
15)
16
17var (
18 // Version contains the application version number. It's set via ldflags
19 // when building.
20 Version = ""
21
22 // CommitSHA contains the SHA of the commit that this application was built
23 // against. It's set via ldflags when building.
24 CommitSHA = ""
25
26 version = flag.Bool("version", false, "display version")
27)
28
29func main() {
30 flag.Usage = func() {
31 fmt.Fprintf(os.Stderr, "Soft Serve, a self-hostable Git server for the command line.\n\n")
32 flag.PrintDefaults()
33 }
34
35 flag.Parse()
36
37 if *version {
38 if len(CommitSHA) > 7 {
39 CommitSHA = CommitSHA[:7]
40 }
41 if Version == "" {
42 Version = "(built from source)"
43 }
44
45 fmt.Printf("Soft Serve %s", Version)
46 if len(CommitSHA) > 0 {
47 fmt.Printf(" (%s)", CommitSHA)
48 }
49
50 fmt.Println()
51 os.Exit(0)
52 }
53
54 cfg := config.DefaultConfig()
55 s := server.NewServer(cfg)
56
57 done := make(chan os.Signal, 1)
58 signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
59
60 go func() {
61 s.Start()
62 }()
63
64 <-done
65
66 ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
67 defer func() { cancel() }()
68 if err := s.Shutdown(ctx); err != nil {
69 log.Fatalln(err)
70 }
71}