All checks were successful
Test / Hakurei (push) Successful in 42s
Test / Create distribution (push) Successful in 25s
Test / Sandbox (push) Successful in 40s
Test / Hakurei (race detector) (push) Successful in 43s
Test / Sandbox (race detector) (push) Successful in 38s
Test / Planterette (push) Successful in 40s
Test / Flake checks (push) Successful in 1m15s
Remove special case and invoke hakurei out of process. 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"
|
|
|
|
"git.gensokyo.uk/security/hakurei/hst"
|
|
"git.gensokyo.uk/security/hakurei/internal"
|
|
"git.gensokyo.uk/security/hakurei/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)
|
|
}
|
|
}
|
|
}
|