about summary refs log tree commit diff stats
path: root/cmd/build/build.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/build/build.go')
-rw-r--r--cmd/build/build.go46
1 files changed, 28 insertions, 18 deletions
diff --git a/cmd/build/build.go b/cmd/build/build.go
index 121d5aa..254eff2 100644
--- a/cmd/build/build.go
+++ b/cmd/build/build.go
@@ -403,12 +403,7 @@ func outputToFile(output io.Reader, filename ...string) error {
 	return nil
 }
 
-func build(outDir string) error {
-	config, err := config.GetConfig()
-	if err != nil {
-		return err
-	}
-
+func build(outDir string, config config.Config) error {
 	privateDir := path.Join(outDir, "private")
 	if err := mkdirp(privateDir); err != nil {
 		return errors.Errorf("could not create private directory: %w", err)
@@ -418,7 +413,7 @@ func build(outDir string) error {
 		return errors.Errorf("could not create public directory: %w", err)
 	}
 
-	err = cp.Copy("static", publicDir, cp.Options{
+	err := cp.Copy("static", publicDir, cp.Options{
 		PreserveTimes:     true,
 		PermissionControl: cp.AddPermission(0755),
 	})
@@ -440,7 +435,7 @@ func build(outDir string) error {
 			return errors.WithMessage(err, "could not create directory for post")
 		}
 		slog.Debug("rendering post", "post", post.Basename)
-		output, err := renderPost(post, *config)
+		output, err := renderPost(post, config)
 		if err != nil {
 			return errors.WithMessagef(err, "could not render post %s", post.Input)
 		}
@@ -453,7 +448,7 @@ func build(outDir string) error {
 		return errors.WithMessage(err, "could not create directory for tags")
 	}
 	slog.Debug("rendering tags list")
-	output, err := renderTags(tags, *config)
+	output, err := renderTags(tags, config)
 	if err != nil {
 		return errors.WithMessage(err, "could not render tags")
 	}
@@ -472,7 +467,7 @@ func build(outDir string) error {
 			return errors.WithMessage(err, "could not create directory")
 		}
 		slog.Debug("rendering tags page", "tag", tag)
-		output, err := renderListPage(tag, *config, matchingPosts)
+		output, err := renderListPage(tag, config, matchingPosts)
 		if err != nil {
 			return errors.WithMessage(err, "could not render tag page")
 		}
@@ -481,7 +476,7 @@ func build(outDir string) error {
 		}
 
 		slog.Debug("rendering tags feed", "tag", tag)
-		output, err = renderFeed(fmt.Sprintf("%s - %s", config.Title, tag), *config, matchingPosts, tag)
+		output, err = renderFeed(fmt.Sprintf("%s - %s", config.Title, tag), config, matchingPosts, tag)
 		if err != nil {
 			return errors.WithMessage(err, "could not render tag feed page")
 		}
@@ -491,7 +486,7 @@ func build(outDir string) error {
 	}
 
 	slog.Debug("rendering list page")
-	listPage, err := renderListPage("", *config, posts)
+	listPage, err := renderListPage("", config, posts)
 	if err != nil {
 		return errors.WithMessage(err, "could not render list page")
 	}
@@ -500,7 +495,7 @@ func build(outDir string) error {
 	}
 
 	slog.Debug("rendering feed")
-	feed, err := renderFeed(config.Title, *config, posts, "feed")
+	feed, err := renderFeed(config.Title, config, posts, "feed")
 	if err != nil {
 		return errors.WithMessage(err, "could not render feed")
 	}
@@ -518,7 +513,7 @@ func build(outDir string) error {
 	}
 
 	slog.Debug("rendering homepage")
-	homePage, err := renderHomepage(*config, posts)
+	homePage, err := renderHomepage(config, posts)
 	if err != nil {
 		return errors.WithMessage(err, "could not render homepage")
 	}
@@ -527,7 +522,7 @@ func build(outDir string) error {
 	}
 
 	slog.Debug("rendering 404 page")
-	notFound, err := render404(*config)
+	notFound, err := render404(config)
 	if err != nil {
 		return errors.WithMessage(err, "could not render 404 page")
 	}
@@ -541,6 +536,7 @@ func build(outDir string) error {
 type IOConfig struct {
 	Source      string `conf:"default:.,short:s"`
 	Destination string `conf:"default:website,short:d"`
+	BaseURL     config.URL
 }
 
 func main() {
@@ -550,7 +546,13 @@ func main() {
 	slog.Debug("starting build process")
 
 	ioConfig := IOConfig{}
-	conf.Parse("", &ioConfig)
+	if help, err := conf.Parse("", &ioConfig); err != nil {
+		if errors.Is(err, conf.ErrHelpWanted) {
+			fmt.Println(help)
+			os.Exit(1)
+		}
+		log.Panicf("parsing I/O configuration: %v", err)
+	}
 
 	if ioConfig.Source != "." {
 		err := os.Chdir(ioConfig.Source)
@@ -558,12 +560,20 @@ func main() {
 			log.Panic("could not change to source directory")
 		}
 	}
-	err := os.RemoveAll(ioConfig.Destination)
+
+	config, err := config.GetConfig()
+	if err != nil {
+		log.Panic(errors.Errorf("could not get config: %v", err))
+	}
+
+	config.BaseURL = ioConfig.BaseURL
+
+	err = os.RemoveAll(ioConfig.Destination)
 	if err != nil {
 		log.Panic(errors.Errorf("could not remove public directory: %v", err))
 	}
 
-	if err := build(ioConfig.Destination); err != nil {
+	if err := build(ioConfig.Destination, *config); err != nil {
 		switch cause := errors.Cause(err).(type) {
 		case *fs.PathError:
 			slog.Info("pathError")