summaryrefslogtreecommitdiff
path: root/cmd/build
diff options
context:
space:
mode:
authoralex emery <[email protected]>2024-11-03 15:33:28 +0000
committeralex emery <[email protected]>2024-11-03 15:33:28 +0000
commit508527f52de524a4fd174d386808e314b4138b11 (patch)
tree2593af258b67decbf0207e2547b7ea55f6b051d7 /cmd/build
parent22bfae8f9637633d5608caad3ce56b64c6819505 (diff)
feat: static builds
Diffstat (limited to 'cmd/build')
-rw-r--r--cmd/build/main.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/cmd/build/main.go b/cmd/build/main.go
new file mode 100644
index 0000000..9c5cd15
--- /dev/null
+++ b/cmd/build/main.go
@@ -0,0 +1,57 @@
+package main
+
+import (
+ "errors"
+ "fmt"
+ "log"
+ "os"
+ "path"
+
+ "git.sr.ht/~a73x/home/pages"
+)
+
+func main() {
+ if err := Run(); err != nil {
+ log.Fatal(err)
+ }
+}
+
+func Run() error {
+ pages, err := pages.Collect("content")
+ if err != nil {
+ return err
+ }
+
+ var errs []error
+ for _, page := range pages {
+ err = writeFile(path.Join("public", page.Path), []byte(page.Content))
+ if err != nil {
+ errs = append(errs, err)
+ }
+ }
+
+ if errs != nil {
+ return errors.Join(errs...)
+ }
+
+ return nil
+}
+
+func writeFile(name string, contents []byte) error {
+ folders := path.Dir(name)
+ _, err := os.Stat(folders)
+ if os.IsNotExist(err) {
+ if err := os.MkdirAll(folders, 0744); err != nil {
+ return fmt.Errorf("failed to mkdir %s\n%w", folders, err)
+ }
+ } else if err != nil {
+ return fmt.Errorf("failed to stat folder %s\n%w", folders, err)
+ }
+
+ err = os.WriteFile(name, contents, 0666)
+ if err != nil {
+ return fmt.Errorf("failed to write file %s\n%w", name, err)
+ }
+
+ return nil
+}