From a8a79a866469c281f5c15daa7b2bd1de91f1d99c Mon Sep 17 00:00:00 2001 From: Ophestra Date: Thu, 31 Jul 2025 23:57:11 +0900 Subject: cmd/hpkg: rename from planterette Planterette is now developed in another repository, so rename this proof of concept to avoid confusion. Signed-off-by: Ophestra --- cmd/hpkg/proc.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 cmd/hpkg/proc.go (limited to 'cmd/hpkg/proc.go') diff --git a/cmd/hpkg/proc.go b/cmd/hpkg/proc.go new file mode 100644 index 00000000..d374e13d --- /dev/null +++ b/cmd/hpkg/proc.go @@ -0,0 +1,60 @@ +package main + +import ( + "context" + "encoding/json" + "errors" + "io" + "log" + "os" + "os/exec" + + "hakurei.app/hst" + "hakurei.app/internal" + "hakurei.app/internal/hlog" +) + +var hakureiPath = internal.MustHakureiPath() + +func mustRunApp(ctx context.Context, config *hst.Config, beforeFail func()) { + var ( + cmd *exec.Cmd + st io.WriteCloser + ) + + if r, w, err := os.Pipe(); err != nil { + beforeFail() + log.Fatalf("cannot pipe: %v", err) + } else { + if hlog.Load() { + cmd = exec.CommandContext(ctx, hakureiPath, "-v", "app", "3") + } else { + cmd = exec.CommandContext(ctx, hakureiPath, "app", "3") + } + cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr + cmd.ExtraFiles = []*os.File{r} + st = w + } + + go func() { + if err := json.NewEncoder(st).Encode(config); err != nil { + beforeFail() + log.Fatalf("cannot send configuration: %v", err) + } + }() + + if err := cmd.Start(); err != nil { + beforeFail() + log.Fatalf("cannot start hakurei: %v", err) + } + if err := cmd.Wait(); err != nil { + var exitError *exec.ExitError + if errors.As(err, &exitError) { + beforeFail() + internal.Exit(exitError.ExitCode()) + } else { + beforeFail() + log.Fatalf("cannot wait: %v", err) + } + } +} -- cgit v1.3.1