main.go

 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}