about summary refs log tree commit diff stats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/build/main.go31
-rw-r--r--cmd/cspgenerator/cspgenerator.go5
-rw-r--r--cmd/server/main.go63
3 files changed, 43 insertions, 56 deletions
diff --git a/cmd/build/main.go b/cmd/build/main.go
index 0b1cc46..84de2dc 100644
--- a/cmd/build/main.go
+++ b/cmd/build/main.go
@@ -2,27 +2,26 @@ package main
 
 import (
 	"fmt"
-	"io/fs"
 	"os"
 
-	"website/internal/builder"
-	"website/internal/log"
+	"go.alanpearce.eu/website/internal/builder"
+	"go.alanpearce.eu/website/internal/config"
+	"go.alanpearce.eu/x/log"
 
-	"github.com/BurntSushi/toml"
 	"github.com/ardanlabs/conf/v3"
-	"github.com/pkg/errors"
+	"gitlab.com/tozd/go/errors"
 )
 
 func main() {
-	ioConfig := builder.IOConfig{}
-	if help, err := conf.Parse("", &ioConfig); err != nil {
+	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 := log.Configure(!ioConfig.Development)
 
 	log.Debug("starting build process")
 	if ioConfig.Source != "." {
@@ -31,16 +30,14 @@ func main() {
 			log.Panic("could not change to source directory")
 		}
 	}
+	cfg, err := config.GetConfig(ioConfig.Source, log)
+	if err != nil {
+		log.Error("could not read config", "error", err)
+	}
 
-	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))
-		}
+	_, err = builder.BuildSite(ioConfig, cfg, log)
+	if err != nil {
+		log.Error("could not build site", "error", err)
 		os.Exit(1)
 	}
 }
diff --git a/cmd/cspgenerator/cspgenerator.go b/cmd/cspgenerator/cspgenerator.go
index 89d2718..0252d32 100644
--- a/cmd/cspgenerator/cspgenerator.go
+++ b/cmd/cspgenerator/cspgenerator.go
@@ -1,13 +1,12 @@
 package main
 
 import (
-	"website/internal/config"
-	"website/internal/log"
+	"go.alanpearce.eu/website/internal/config"
 )
 
 func main() {
 	err := config.GenerateCSP()
 	if err != nil {
-		log.Fatal("error generating csp", "error", err)
+		panic(err)
 	}
 }
diff --git a/cmd/server/main.go b/cmd/server/main.go
index 51a9e52..be36e3b 100644
--- a/cmd/server/main.go
+++ b/cmd/server/main.go
@@ -1,21 +1,16 @@
 package main
 
 import (
+	"context"
 	"fmt"
 	"os"
 	"os/signal"
-	"sync"
 
-	"website/internal/log"
-	"website/internal/server"
+	"go.alanpearce.eu/website/internal/server"
+	"go.alanpearce.eu/x/log"
 
 	"github.com/ardanlabs/conf/v3"
-	"github.com/pkg/errors"
-)
-
-var (
-	CommitSHA string
-	ShortSHA  string
+	"gitlab.com/tozd/go/errors"
 )
 
 func main() {
@@ -28,45 +23,41 @@ func main() {
 		}
 		panic("parsing runtime configuration" + err.Error())
 	}
-	log.Configure(!runtimeConfig.Development)
+	log := log.Configure(!runtimeConfig.Development)
+
+	if listenAddress := runtimeConfig.ListenAddress; listenAddress[0] == '[' {
+		runtimeConfig.ListenAddress = listenAddress[1 : len(listenAddress)-1]
+	}
 
 	if runtimeConfig.Development {
 		tmpdir, err := os.MkdirTemp("", "website")
 		if err != nil {
-			log.Fatal("could not create temporary directory to build website: %v", err)
+			log.Fatal("could not create temporary directory", "error", err)
 		}
-		runtimeConfig.Root = tmpdir
 		defer os.RemoveAll(tmpdir)
+		runtimeConfig.Root = tmpdir
 	}
 
-	c := make(chan os.Signal, 2)
-	signal.Notify(c, os.Interrupt)
-	sv, err := server.New(&runtimeConfig)
+	sv, err := server.New(&runtimeConfig, log)
 	if err != nil {
-		log.Fatal("error setting up server", "error", err)
+		log.Error("could not create server", "error", err)
+
+		return
 	}
-	wg := &sync.WaitGroup{}
-	wg.Add(1)
-	go func() {
-		defer wg.Done()
-		sig := <-c
-		log.Info("signal captured", "sig", sig)
-		<-sv.Stop()
-		log.Debug("server stopped")
-	}()
 
-	sErr := make(chan error)
-	wg.Add(1)
+	ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
+	defer cancel()
+
 	go func() {
-		defer wg.Done()
-		sErr <- sv.Start()
+		err = sv.Start()
+		if err != nil {
+			// Error starting or closing listener:
+			log.Fatal("error %v", err)
+		}
 	}()
-	log.Info("server listening", "address", sv.Addr)
 
-	err = <-sErr
-	if err != nil {
-		// Error starting or closing listener:
-		log.Fatal("error", "error", err)
-	}
-	wg.Wait()
+	<-ctx.Done()
+	log.Debug("calling stop")
+	sv.Stop()
+	log.Debug("done")
 }