git-preview @ main

static git web frontend but with images and html previews + code truncation

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}