internal/outcome/process: output via msg
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Test / Create distribution (push) Successful in 33s
				
			
		
			
				
	
				Test / Sandbox (push) Successful in 2m13s
				
			
		
			
				
	
				Test / Hakurei (push) Successful in 3m9s
				
			
		
			
				
	
				Test / Hpkg (push) Successful in 3m57s
				
			
		
			
				
	
				Test / Sandbox (race detector) (push) Successful in 4m8s
				
			
		
			
				
	
				Test / Hakurei (race detector) (push) Successful in 4m54s
				
			
		
			
				
	
				Test / Flake checks (push) Successful in 1m27s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 33s
				
			Test / Sandbox (push) Successful in 2m13s
				
			Test / Hakurei (push) Successful in 3m9s
				
			Test / Hpkg (push) Successful in 3m57s
				
			Test / Sandbox (race detector) (push) Successful in 4m8s
				
			Test / Hakurei (race detector) (push) Successful in 4m54s
				
			Test / Flake checks (push) Successful in 1m27s
				
			This makes it possible to instrument output behaviour through stub. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
		
							parent
							
								
									eeb9f98e5b
								
							
						
					
					
						commit
						36f8064905
					
				| @ -3,7 +3,6 @@ package outcome | ||||
| import ( | ||||
| 	"context" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 
 | ||||
| 	"hakurei.app/hst" | ||||
| 	"hakurei.app/message" | ||||
| @ -18,8 +17,8 @@ func Main(ctx context.Context, msg message.Msg, config *hst.Config) { | ||||
| 
 | ||||
| 	seal := outcome{syscallDispatcher: direct{msg}} | ||||
| 	if err := seal.finalise(ctx, msg, &id, config); err != nil { | ||||
| 		printMessageError("cannot seal app:", err) | ||||
| 		os.Exit(1) | ||||
| 		printMessageError(msg.GetLogger().Fatalln, "cannot seal app:", err) | ||||
| 		panic("unreachable") | ||||
| 	} | ||||
| 
 | ||||
| 	seal.main(msg) | ||||
|  | ||||
| @ -4,7 +4,6 @@ import ( | ||||
| 	"context" | ||||
| 	"encoding/gob" | ||||
| 	"errors" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"strconv" | ||||
| @ -68,7 +67,7 @@ func (ms mainState) beforeExit(isFault bool) { | ||||
| 	// updates hasErr but does not terminate | ||||
| 	perror := func(err error, message string) { | ||||
| 		hasErr = true | ||||
| 		printMessageError("cannot "+message+":", err) | ||||
| 		printMessageError(ms.GetLogger().Println, "cannot "+message+":", err) | ||||
| 	} | ||||
| 	exitCode := 1 | ||||
| 	defer func() { | ||||
| @ -121,7 +120,7 @@ func (ms mainState) beforeExit(isFault bool) { | ||||
| 			// this is only reachable when shim did not exit within shimWaitTimeout, after its WaitDelay has elapsed. | ||||
| 			// This is different from the container failing to terminate within its timeout period, as that is enforced | ||||
| 			// by the shim. This path is instead reached when there is a lockup in shim preventing it from completing. | ||||
| 			log.Printf("process %d did not terminate", ms.cmd.Process.Pid) | ||||
| 			ms.GetLogger().Printf("process %d did not terminate", ms.cmd.Process.Pid) | ||||
| 		} | ||||
| 
 | ||||
| 		ms.Resume() | ||||
| @ -167,7 +166,7 @@ func (ms mainState) beforeExit(isFault bool) { | ||||
| 					if s.Config != nil { | ||||
| 						rt |= s.Config.Enablements.Unwrap() | ||||
| 					} else { | ||||
| 						log.Printf("state entry %d does not contain config", i) | ||||
| 						ms.GetLogger().Printf("state entry %d does not contain config", i) | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| @ -196,7 +195,7 @@ func (ms mainState) beforeExit(isFault bool) { | ||||
| 
 | ||||
| // fatal calls printMessageError, performs necessary cleanup, followed by a call to [os.Exit](1). | ||||
| func (ms mainState) fatal(fallback string, ferr error) { | ||||
| 	printMessageError(fallback, ferr) | ||||
| 	printMessageError(ms.GetLogger().Println, fallback, ferr) | ||||
| 	ms.beforeExit(true) | ||||
| 	os.Exit(1) | ||||
| } | ||||
| @ -310,12 +309,12 @@ func (k *outcome) main(msg message.Msg) { | ||||
| 
 | ||||
| // printMessageError prints the error message according to [message.GetMessage], | ||||
| // or fallback prepended to err if an error message is not available. | ||||
| func printMessageError(fallback string, err error) { | ||||
| func printMessageError(println func(v ...any), fallback string, err error) { | ||||
| 	m, ok := message.GetMessage(err) | ||||
| 	if !ok { | ||||
| 		log.Println(fallback, err) | ||||
| 		println(fallback, err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	log.Print(m) | ||||
| 	println(m) | ||||
| } | ||||
|  | ||||
| @ -3,6 +3,7 @@ package outcome | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"log" | ||||
| 	"os" | ||||
| @ -213,11 +214,19 @@ func shimEntrypoint(k syscallDispatcher) { | ||||
| 	z.WaitDelay = state.Shim.WaitDelay | ||||
| 
 | ||||
| 	if err := k.containerStart(z); err != nil { | ||||
| 		printMessageError("cannot start container:", err) | ||||
| 		var f func(v ...any) | ||||
| 		if logger := msg.GetLogger(); logger != nil { | ||||
| 			f = logger.Println | ||||
| 		} else { | ||||
| 			f = func(v ...any) { | ||||
| 				msg.Verbose(fmt.Sprintln(v...)) | ||||
| 			} | ||||
| 		} | ||||
| 		printMessageError(f, "cannot start container:", err) | ||||
| 		k.exit(hst.ExitFailure) | ||||
| 	} | ||||
| 	if err := k.containerServe(z); err != nil { | ||||
| 		printMessageError("cannot configure container:", err) | ||||
| 		printMessageError(func(v ...any) { k.fatal(fmt.Sprintln(v...)) }, "cannot configure container:", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := k.seccompLoad( | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user