about summary refs log tree commit diff stats
path: root/cmd/build
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/build')
-rw-r--r--cmd/build/main.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/cmd/build/main.go b/cmd/build/main.go
new file mode 100644
index 0000000..0b1cc46
--- /dev/null
+++ b/cmd/build/main.go
@@ -0,0 +1,46 @@
+package main
+
+import (
+	"fmt"
+	"io/fs"
+	"os"
+
+	"website/internal/builder"
+	"website/internal/log"
+
+	"github.com/BurntSushi/toml"
+	"github.com/ardanlabs/conf/v3"
+	"github.com/pkg/errors"
+)
+
+func main() {
+	ioConfig := builder.IOConfig{}
+	if help, err := conf.Parse("", &ioConfig); err != nil {
+		if errors.Is(err, conf.ErrHelpWanted) {
+			fmt.Println(help)
+			os.Exit(1)
+		}
+		panic("error parsing configuration: " + err.Error())
+	}
+	log.Configure(!ioConfig.Development)
+
+	log.Debug("starting build process")
+	if ioConfig.Source != "." {
+		err := os.Chdir(ioConfig.Source)
+		if err != nil {
+			log.Panic("could not change to source directory")
+		}
+	}
+
+	if err := builder.BuildSite(ioConfig); err != nil {
+		switch cause := errors.Cause(err).(type) {
+		case *fs.PathError:
+			log.Error("path error", "error", err)
+		case toml.ParseError:
+			log.Info("parse error", "error", err)
+		default:
+			log.Info("other error", "error", err, "cause", errors.Cause(cause))
+		}
+		os.Exit(1)
+	}
+}