-
Notifications
You must be signed in to change notification settings - Fork 0
/
dev_cmd.go
68 lines (59 loc) · 1.48 KB
/
dev_cmd.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"context"
"fmt"
"net/http"
"github.com/rjeczalik/notify"
"github.com/tstromberg/nykya/pkg/nykya"
"github.com/tstromberg/nykya/pkg/render"
"github.com/tstromberg/nykya/pkg/store"
"k8s.io/klog/v2"
)
type devCmd struct {
Port int `default:32080 help:"Set a port TCP number"`
Drafts bool `optional help:"Include draft posts"`
}
func renderLoop(ctx context.Context, dc nykya.Config) error {
klog.Infof("starting render loop ...")
c := make(chan notify.EventInfo, 1)
if err := notify.Watch(dc.In, c, notify.Remove); err != nil {
klog.Fatal(err)
}
defer notify.Stop(c)
for {
ei := <-c
klog.Infof("Got event:", ei)
items, err := store.Scan(ctx, dc.Root)
if err != nil {
klog.Fatalf("scan: %w", err)
}
_, err = render.Site(ctx, dc, items)
if err != nil {
klog.Fatalf("render: %v", err)
}
}
}
func (c *devCmd) Run(globals *Globals) error {
dc, err := nykya.ConfigFromRoot(globals.Root)
if err != nil {
return fmt.Errorf("config from root: %w", err)
}
if c.Drafts {
dc.IncludeDrafts = true
}
ctx := context.Background()
items, err := store.Scan(ctx, dc.In)
if err != nil {
return fmt.Errorf("scan: %w", err)
}
paths, err := render.Site(ctx, dc, items)
if err != nil {
return fmt.Errorf("render: %w", err)
}
klog.Infof("rendered: %v", paths)
klog.Infof("Starting up server on port %d ...", c.Port)
fs := http.FileServer(http.Dir(dc.Out))
http.Handle("/", fs)
http.ListenAndServe(fmt.Sprintf(":%d", c.Port), nil)
return nil
}