main.go
1package main
2
3import (
4 "flag"
5 "fmt"
6 "log"
7 "net/http"
8
9 "github.com/jxc2000-b/git-preview/config"
10 "github.com/jxc2000-b/git-preview/export"
11 "github.com/jxc2000-b/git-preview/routes"
12)
13
14func main() {
15 var cfg, exportDir string
16 flag.StringVar(&cfg, "config", "./config.yaml", "path to config file")
17 flag.StringVar(&exportDir, "export", "", "export a static site to this directory instead of serving")
18 flag.Parse()
19
20 c, err := config.Read(cfg)
21 if err != nil {
22 log.Fatal(err)
23 }
24
25 // Fall back to the assets baked into the binary when the config
26 // doesn't point at template/static dirs on disk.
27 if c.Dirs.Templates == "" || c.Dirs.Static == "" {
28 tpl, static, err := materializeAssets()
29 if err != nil {
30 log.Fatalf("embedded assets: %s", err)
31 }
32 if c.Dirs.Templates == "" {
33 c.Dirs.Templates = tpl
34 }
35 if c.Dirs.Static == "" {
36 c.Dirs.Static = static
37 }
38 }
39
40 if exportDir != "" {
41 if err := export.Run(c, exportDir); err != nil {
42 log.Fatal(err)
43 }
44 log.Println("exported static site to", exportDir)
45 return
46 }
47
48 if err := UnveilPaths([]string{
49 c.Dirs.Static,
50 c.Repo.ScanPath,
51 c.Dirs.Templates,
52 },
53 "r"); err != nil {
54 log.Fatalf("unveil: %s", err)
55 }
56
57 mux := routes.Handlers(c)
58 addr := fmt.Sprintf("%s:%d", c.Server.Host, c.Server.Port)
59 log.Println("starting server on", addr)
60 log.Fatal(http.ListenAndServe(addr, mux))
61}