aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/xesite/devel.go95
-rw-r--r--cmd/xesite/main.go4
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--gomod2nix.toml3
-rw-r--r--internal/lume/lume.go4
6 files changed, 110 insertions, 2 deletions
diff --git a/cmd/xesite/devel.go b/cmd/xesite/devel.go
new file mode 100644
index 0000000..7bfb72e
--- /dev/null
+++ b/cmd/xesite/devel.go
@@ -0,0 +1,95 @@
+package main
+
+import (
+ "context"
+ "log"
+ "log/slog"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "gopkg.in/fsnotify.v1"
+ "xeiaso.net/v4/internal/lume"
+)
+
+var (
+ ignoredDirs = []string{"_site", "_data", "_bin"}
+)
+
+func findDirectories(root string) ([]string, error) {
+ var dirs []string
+
+ err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ if info.IsDir() {
+ dirs = append(dirs, path)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ return nil, err
+ }
+
+ return dirs, nil
+}
+
+func filterDirectory(dir string, filterRules []string) bool {
+ for _, rule := range filterRules {
+ if strings.Contains(dir, rule) {
+ return true
+ }
+ }
+
+ return false
+}
+
+func rebuildOnChange(fs *lume.FS) {
+ watcher, err := fsnotify.NewWatcher()
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer watcher.Close()
+
+ if err = watcher.Add("./lume"); err != nil {
+ log.Fatal(err)
+ }
+
+ dirs, err := findDirectories("./lume")
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ for _, dir := range dirs {
+ if filterDirectory(dir, ignoredDirs) {
+ continue
+ }
+
+ slog.Debug("adding dir", "dir", dir)
+ if err = watcher.Add(dir); err != nil {
+ log.Fatal(err)
+ }
+ }
+
+ for {
+ select {
+ case event := <-watcher.Events:
+ if filterDirectory(event.Name, ignoredDirs) {
+ continue
+ }
+
+ slog.Debug("got event", "fname", event.Name, "op", event.Op.String())
+
+ slog.Info("reloading")
+ if err := fs.Update(context.Background()); err != nil {
+ slog.Error("reload failed", "err", err)
+ }
+ case err := <-watcher.Errors:
+ log.Fatal(err)
+ }
+ }
+}
diff --git a/cmd/xesite/main.go b/cmd/xesite/main.go
index bf01514..5806dd7 100644
--- a/cmd/xesite/main.go
+++ b/cmd/xesite/main.go
@@ -87,6 +87,10 @@ func main() {
defer fs.Close()
+ if *devel {
+ go rebuildOnChange(fs)
+ }
+
if err != nil {
log.Fatal(err)
}
diff --git a/go.mod b/go.mod
index 6c05880..02bc845 100644
--- a/go.mod
+++ b/go.mod
@@ -78,6 +78,7 @@ require (
github.com/prometheus/common v0.42.0 // indirect
github.com/prometheus/procfs v0.9.0 // indirect
github.com/sergi/go-diff v1.3.1 // indirect
+ github.com/sigma/go-inotify v0.0.0-20181102212354-c87b6cf5033d // indirect
github.com/skeema/knownhosts v1.2.0 // indirect
github.com/tailscale/certstore v0.1.1-0.20220316223106-78d6e1c49d8d // indirect
github.com/tailscale/golang-x-crypto v0.0.0-20230713185742-f0b76a10a08e // indirect
@@ -106,6 +107,7 @@ require (
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.31.0 // indirect
+ gopkg.in/fsnotify.v1 v1.4.7 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gvisor.dev/gvisor v0.0.0-20230504175454-7b0a1988a28f // indirect
inet.af/peercred v0.0.0-20210906144145-0893ea02156a // indirect
diff --git a/go.sum b/go.sum
index 8bc3dda..c70f85a 100644
--- a/go.sum
+++ b/go.sum
@@ -231,6 +231,8 @@ github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDN
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
+github.com/sigma/go-inotify v0.0.0-20181102212354-c87b6cf5033d h1:G1nNtZVTzcCvVKMwcG0Vispo3bhc15EbjO5uamiLikI=
+github.com/sigma/go-inotify v0.0.0-20181102212354-c87b6cf5033d/go.mod h1:stlh9OsqBQSdwxTxX73mu41BBtRbIpZLQ7flcAoxAfo=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM=
github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo=
@@ -372,6 +374,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/mxpv/patreon-go.v1 v1.0.0-20171031001022-1d2f253ac700 h1:ymnLBRNALxuok6al+nlPJxfSa3yc2SZc5N21svHQtys=
gopkg.in/mxpv/patreon-go.v1 v1.0.0-20171031001022-1d2f253ac700/go.mod h1:IZaw6NfbSsGszLfPbo9LLlxLIx17eMHWe4cxpM8wUMk=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
diff --git a/gomod2nix.toml b/gomod2nix.toml
index 90967cb..aa85457 100644
--- a/gomod2nix.toml
+++ b/gomod2nix.toml
@@ -205,6 +205,9 @@ schema = 3
[mod."github.com/sergi/go-diff"]
version = "v1.3.1"
hash = "sha256-XLA/BLIPuUU76yikXqIeRSXr7T7A3Uz6I27+mDxGj7w="
+ [mod."github.com/sigma/go-inotify"]
+ version = "v0.0.0-20181102212354-c87b6cf5033d"
+ hash = "sha256-rdWhvNBGz1xelg8ivrmXhEldwXnJV7mas6yQaAcBc+4="
[mod."github.com/skeema/knownhosts"]
version = "v1.2.0"
hash = "sha256-D5xB9lLablPhYUqTbdu8Ub366n//+JTgK3jcnMHlwYs="
diff --git a/internal/lume/lume.go b/internal/lume/lume.go
index 40eafd9..f40450f 100644
--- a/internal/lume/lume.go
+++ b/internal/lume/lume.go
@@ -320,7 +320,7 @@ func (f *FS) writePatrons(dataDir string) error {
func (f *FS) writeConfig(siteCommit string) error {
dataDir := filepath.Join(f.repoDir, f.opt.StaticSiteDir, "src", "_data")
-
+
os.WriteFile(filepath.Join(dataDir, "patrons.json"), []byte(`{"included": {"Items": []}}`), 0o644)
if f.opt.PatreonClient != nil {
@@ -438,7 +438,7 @@ func (f *FS) buildResume(ctx context.Context) error {
return fmt.Errorf("failed to build resume: %w", err)
}
- if err := os.MkdirAll(filepath.Join(f.repoDir, f.opt.StaticSiteDir, "static", "resume"), 0o755); err != nil {
+ if err := os.MkdirAll(filepath.Join(f.repoDir, f.opt.StaticSiteDir, "src", "static", "resume"), 0o755); err != nil {
return fmt.Errorf("failed to create resume dir: %w", err)
}