All checks were successful
Test / Create distribution (push) Successful in 33s
Test / Sandbox (push) Successful in 1m58s
Test / Sandbox (race detector) (push) Successful in 3m47s
Test / Hpkg (push) Successful in 3m54s
Test / Hakurei (race detector) (push) Successful in 4m32s
Test / Hakurei (push) Successful in 2m10s
Test / Flake checks (push) Successful in 1m19s
Planterette is now developed in another repository, so rename this proof of concept to avoid confusion. Signed-off-by: Ophestra <cat@gensokyo.uk>
61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|