diff options
Diffstat (limited to 'cmd/dev')
-rw-r--r-- | cmd/dev/main.go | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/cmd/dev/main.go b/cmd/dev/main.go index 459cfaf..e1525a2 100644 --- a/cmd/dev/main.go +++ b/cmd/dev/main.go @@ -48,7 +48,8 @@ func RunCommandPiped( if err != nil { log.Error("signal error:", "error", err) } - return err + + return errors.Wrap(err, "error signalling child process") } stdout, err := cmd.StdoutPipe() if err != nil { @@ -59,8 +60,18 @@ func RunCommandPiped( return } - go io.Copy(os.Stdout, stdout) - go io.Copy(os.Stderr, stderr) + go func() { + _, err := io.Copy(os.Stdout, stdout) + if err != nil { + log.Error("error copying stdout", "error", err) + } + }() + go func() { + _, err := io.Copy(os.Stderr, stderr) + if err != nil { + log.Error("error copying stderr", "error", err) + } + }() return } @@ -72,24 +83,27 @@ type FileWatcher struct { func NewFileWatcher(pollTime time.Duration) (*FileWatcher, error) { batcher, err := watcher.New(pollTime/5, pollTime, true) if err != nil { - return nil, err + return nil, errors.Wrap(err, "could not create file watcher") } + return &FileWatcher{batcher}, nil } func (watcher FileWatcher) WatchAllFiles(from string) error { log.Debug("watching files under", "from", from) - err := filepath.Walk(from, func(path string, info fs.FileInfo, err error) error { + err := filepath.Walk(from, func(path string, _ fs.FileInfo, err error) error { if err != nil { return err } // log.Debug(fmt.Sprintf("adding file %s to watcher", path)) if err = watcher.Add(path); err != nil { - return err + return errors.Wrapf(err, "could not add path %s to watcher", path) } + return nil }) - return err + + return errors.Wrapf(err, "could not walk directory tree %s", from) } func build(ctx context.Context, config DevConfig) error { @@ -113,6 +127,7 @@ func build(ctx context.Context, config DevConfig) error { if err != nil { return errors.WithMessage(err, "error running build command") } + return nil } @@ -153,7 +168,7 @@ func server(ctx context.Context, devConfig DevConfig) error { log.Debug("server context done") err := cmd.Process.Signal(os.Interrupt) if err != nil { - return err + return errors.Wrap(err, "could not process signal") } <-done case err := <-cmdErr: @@ -179,7 +194,6 @@ func main() { log.Debug("running with in /tmp", "dir", devConfig.TempDir) ctx, cancel := context.WithCancel(context.Background()) - defer cancel() log.Debug("setting interrupt handler") c := make(chan os.Signal, 1) @@ -195,9 +209,9 @@ func main() { serverChan := make(chan bool, 1) eventsource := eventsource.New(nil, nil) - defer eventsource.Close() srv := http.Server{ - Addr: devConfig.BaseURL.Host, + Addr: devConfig.BaseURL.Host, + ReadHeaderTimeout: 1 * time.Minute, } devCtx, devCancel := context.WithTimeout(ctx, 1*time.Second) @@ -242,15 +256,15 @@ func main() { fw, err := NewFileWatcher(500 * time.Millisecond) if err != nil { - log.Fatal("error creating file watcher", "error", err) + log.Panic("error creating file watcher", "error", err) } err = fw.WatchAllFiles("content") if err != nil { - log.Fatal("could not watch files in content directory", "error", err) + log.Panic("could not watch files in content directory", "error", err) } err = fw.WatchAllFiles("templates") if err != nil { - log.Fatal("could not watch files in templates directory", "error", err) + log.Panic("could not watch files in templates directory", "error", err) } var exitCode int @@ -283,6 +297,7 @@ loop: log.Debug("shutdown error", "error", err) } exitCode = 1 + break loop case event := <-fw.Events: log.Debug("event received:", "event", event) @@ -291,6 +306,7 @@ loop: log.Debug("waiting for server shutdown") <-serverErr log.Debug("server shutdown completed") + continue case err = <-serverErr: if err != nil && err != context.Canceled { @@ -301,18 +317,24 @@ loop: } else { log.Debug("server other error") } + break } log.Debug("no error or server context cancelled") + continue } log.Debug("waiting on server") exitCode = 0 + break } log.Debug("waiting for wg before shutting down") + eventsource.Close() + cancel() wg.Wait() + os.Exit(exitCode) } |