about summary refs log tree commit diff stats
path: root/internal/builder/builder.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/builder/builder.go')
-rw-r--r--internal/builder/builder.go53
1 files changed, 31 insertions, 22 deletions
diff --git a/internal/builder/builder.go b/internal/builder/builder.go
index 256d422..b99d919 100644
--- a/internal/builder/builder.go
+++ b/internal/builder/builder.go
@@ -6,18 +6,19 @@ import (
 	"io"
 	"os"
 	"path"
+	"path/filepath"
 	"slices"
 	"time"
 
-	"website/internal/config"
-	"website/internal/content"
-	"website/internal/log"
-	"website/internal/sitemap"
-	"website/templates"
+	"go.alanpearce.eu/website/internal/config"
+	"go.alanpearce.eu/website/internal/content"
+	"go.alanpearce.eu/x/log"
+	"go.alanpearce.eu/website/internal/sitemap"
+	"go.alanpearce.eu/website/templates"
 
 	"github.com/a-h/templ"
 	mapset "github.com/deckarep/golang-set/v2"
-	"github.com/pkg/errors"
+	"gitlab.com/tozd/go/errors"
 )
 
 type IOConfig struct {
@@ -86,13 +87,21 @@ func writerToFile(writer io.WriterTo, pathParts ...string) error {
 	return nil
 }
 
-func build(outDir string, config *config.Config) (*Result, error) {
+func joinSourcePath(src string) func(string) string {
+	return func(rel string) string {
+		return filepath.Join(src, rel)
+	}
+}
+
+func build(ioConfig *IOConfig, config *config.Config, log *log.Logger) (*Result, error) {
+	outDir := ioConfig.Destination
+	joinSource := joinSourcePath(ioConfig.Source)
 	log.Debug("output", "dir", outDir)
 	r := &Result{
 		Hashes: make([]string, 0),
 	}
 
-	err := copyRecursive("static", outDir)
+	err := copyRecursive(joinSource("static"), outDir)
 	if err != nil {
 		return nil, errors.WithMessage(err, "could not copy static files")
 	}
@@ -101,7 +110,11 @@ func build(outDir string, config *config.Config) (*Result, error) {
 		return nil, errors.WithMessage(err, "could not create post output directory")
 	}
 	log.Debug("reading posts")
-	posts, tags, err := content.ReadPosts("content", "post", outDir)
+	posts, tags, err := content.ReadPosts(&content.Config{
+		Root:      joinSource("content"),
+		InputDir:  "post",
+		OutputDir: outDir,
+	}, log.Named("content"))
 	if err != nil {
 		return nil, err
 	}
@@ -170,7 +183,7 @@ func build(outDir string, config *config.Config) (*Result, error) {
 		if err != nil {
 			return nil, errors.WithMessage(err, "could not render tag feed page")
 		}
-		if err := outputToFile(feed, outDir, "tags", tag, "atom.xml"); err != nil {
+		if err := writerToFile(feed, outDir, "tags", tag, "atom.xml"); err != nil {
 			return nil, err
 		}
 	}
@@ -186,12 +199,12 @@ func build(outDir string, config *config.Config) (*Result, error) {
 	if err != nil {
 		return nil, errors.WithMessage(err, "could not render feed")
 	}
-	if err := outputToFile(feed, outDir, "atom.xml"); err != nil {
+	if err := writerToFile(feed, outDir, "atom.xml"); err != nil {
 		return nil, err
 	}
 
 	log.Debug("rendering feed styles")
-	feedStyles, err := renderFeedStyles()
+	feedStyles, err := renderFeedStyles(ioConfig.Source)
 	if err != nil {
 		return nil, errors.WithMessage(err, "could not render feed styles")
 	}
@@ -209,7 +222,7 @@ func build(outDir string, config *config.Config) (*Result, error) {
 	r.Hashes = append(r.Hashes, h)
 
 	log.Debug("rendering homepage")
-	_, text, err := content.GetPost(path.Join("content", "index.md"))
+	_, text, err := content.GetPost(joinSource(filepath.Join("content", "index.md")))
 	if err != nil {
 		return nil, err
 	}
@@ -233,7 +246,7 @@ func build(outDir string, config *config.Config) (*Result, error) {
 	}
 
 	log.Debug("rendering robots.txt")
-	rob, err := renderRobotsTXT(config)
+	rob, err := renderRobotsTXT(ioConfig.Source, config)
 	if err != nil {
 		return nil, err
 	}
@@ -244,19 +257,15 @@ func build(outDir string, config *config.Config) (*Result, error) {
 	return r, nil
 }
 
-func BuildSite(ioConfig *IOConfig, cfg *config.Config) (*Result, error) {
+func BuildSite(ioConfig *IOConfig, cfg *config.Config, log *log.Logger) (*Result, error) {
 	if cfg == nil {
-		var err error
-		cfg, err = config.GetConfig()
-		if err != nil {
-			return nil, errors.WithMessage(err, "could not get config")
-		}
+		return nil, errors.New("config is nil")
 	}
 	cfg.InjectLiveReload = ioConfig.Development
 	compressFiles = !ioConfig.Development
 
 	templates.Setup()
-	loadCSS()
+	loadCSS(ioConfig.Source)
 
-	return build(ioConfig.Destination, cfg)
+	return build(ioConfig, cfg, log)
 }