diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/build/main.go | 31 | ||||
-rw-r--r-- | cmd/cspgenerator/cspgenerator.go | 5 | ||||
-rw-r--r-- | cmd/server/main.go | 63 |
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") } |