All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 33s
				
			Test / Sandbox (push) Successful in 2m9s
				
			Test / Hakurei (push) Successful in 3m5s
				
			Test / Hpkg (push) Successful in 4m4s
				
			Test / Sandbox (race detector) (push) Successful in 4m9s
				
			Test / Hakurei (race detector) (push) Successful in 4m46s
				
			Test / Flake checks (push) Successful in 1m30s
				
			These names are less ambiguous and should be understandable without reading the source code. Signed-off-by: Ophestra <cat@gensokyo.uk>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			62 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/message"
 | |
| )
 | |
| 
 | |
| var hakureiPathVal = internal.MustHakureiPath().String()
 | |
| 
 | |
| func mustRunApp(ctx context.Context, msg message.Msg, 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 msg.IsVerbose() {
 | |
| 			cmd = exec.CommandContext(ctx, hakureiPathVal, "-v", "app", "3")
 | |
| 		} else {
 | |
| 			cmd = exec.CommandContext(ctx, hakureiPathVal, "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()
 | |
| 			msg.BeforeExit()
 | |
| 			os.Exit(exitError.ExitCode())
 | |
| 		} else {
 | |
| 			beforeFail()
 | |
| 			log.Fatalf("cannot wait: %v", err)
 | |
| 		}
 | |
| 	}
 | |
| }
 |