feat(cmd/joj3): return non-zero on force quit #63
|  | @ -69,7 +69,8 @@ func mainImpl() error { | |||
| 		slog.Error("conf check expire", "error", err) | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := stage.Run(confObj, group); err != nil { | ||||
| 	stageForceQuit, err := stage.Run(confObj, group) | ||||
| 	if err != nil { | ||||
| 		slog.Error("stage run", "error", err) | ||||
| 		return err | ||||
| 	} | ||||
|  | @ -77,6 +78,10 @@ func mainImpl() error { | |||
| 		slog.Error("teapot run", "error", err) | ||||
| 		return err | ||||
| 	} | ||||
| 	if stageForceQuit { | ||||
| 		slog.Info("stage force quit") | ||||
| 		return fmt.Errorf("stage force quit") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ func TestRun(t *testing.T) { | |||
| 			os.Args = []string{"./joj3"} | ||||
| 			outputFile := "joj3_result.json" | ||||
| 			defer os.Remove(outputFile) | ||||
| 			main() | ||||
| 			_ = mainImpl() | ||||
| 			stageResults := readStageResults(t, outputFile) | ||||
| 			regex := true | ||||
| 			expectedFile := "expected_regex.json" | ||||
|  |  | |||
|  | @ -81,7 +81,7 @@ func outputResult(outputPath string, results []stage.StageResult) error { | |||
| 		append(content, []byte("\n")...), 0o600) | ||||
| } | ||||
| 
 | ||||
| func Run(conf *conf.Conf, group string) error { | ||||
| func Run(conf *conf.Conf, group string) (forceQuit bool, err error) { | ||||
| 	executors.InitWithConf( | ||||
| 		conf.Stage.SandboxExecServer, | ||||
| 		conf.Stage.SandboxToken, | ||||
|  | @ -89,17 +89,17 @@ func Run(conf *conf.Conf, group string) error { | |||
| 	stages, err := generateStages(conf, group) | ||||
| 	if err != nil { | ||||
| 		slog.Error("generate stages", "error", err) | ||||
| 		return err | ||||
| 		return | ||||
| 	} | ||||
| 	defer stage.Cleanup() | ||||
| 	results, err := stage.Run(stages) | ||||
| 	results, forceQuit, err := stage.Run(stages) | ||||
| 	if err != nil { | ||||
| 		slog.Error("run stages", "error", err) | ||||
| 		return err | ||||
| 		return | ||||
| 	} | ||||
| 	if err := outputResult(conf.Stage.OutputPath, results); err != nil { | ||||
| 	if err = outputResult(conf.Stage.OutputPath, results); err != nil { | ||||
| 		slog.Error("output result", "error", err) | ||||
| 		return err | ||||
| 		return | ||||
| 	} | ||||
| 	return nil | ||||
| 	return | ||||
| } | ||||
|  |  | |||
|  | @ -5,11 +5,10 @@ import ( | |||
| 	"log/slog" | ||||
| ) | ||||
| 
 | ||||
| func Run(stages []Stage) (stageResults []StageResult, err error) { | ||||
| func Run(stages []Stage) (stageResults []StageResult, forceQuit bool, err error) { | ||||
| 	var executorResults []ExecutorResult | ||||
| 	var parserResults []ParserResult | ||||
| 	var tmpParserResults []ParserResult | ||||
| 	var forceQuit bool | ||||
| 	slog.Info("stage run start") | ||||
| 	for _, stage := range stages { | ||||
| 		slog.Info("stage start", "name", stage.Name) | ||||
|  | @ -32,7 +31,7 @@ func Run(stages []Stage) (stageResults []StageResult, err error) { | |||
| 			slog.Debug("executor run done", "result.Files", executorResult.Files) | ||||
| 		} | ||||
| 		parserResults = []ParserResult{} | ||||
| 		stageForceQuit := false | ||||
| 		forceQuit = false | ||||
| 		for _, stageParser := range stage.Parsers { | ||||
| 			slog.Info("parser run start", "name", stageParser.Name) | ||||
| 			slog.Debug("parser run start", "name", stageParser.Name, | ||||
|  | @ -43,13 +42,17 @@ func Run(stages []Stage) (stageResults []StageResult, err error) { | |||
| 				err = fmt.Errorf("parser not found: %s", stageParser.Name) | ||||
| 				return | ||||
| 			} | ||||
| 			tmpParserResults, forceQuit, err = parser.Run( | ||||
| 			var parserForceQuit bool | ||||
| 			tmpParserResults, parserForceQuit, err = parser.Run( | ||||
| 				executorResults, stageParser.Conf) | ||||
| 			if err != nil { | ||||
| 				slog.Error("parser run error", "name", stageParser.Name, "error", err) | ||||
| 				return | ||||
| 			} | ||||
| 			stageForceQuit = stageForceQuit || forceQuit | ||||
| 			if parserForceQuit { | ||||
| 				slog.Error("parser force quit", "name", stageParser.Name) | ||||
| 			} | ||||
| 			forceQuit = forceQuit || parserForceQuit | ||||
| 			slog.Debug("parser run done", "results", tmpParserResults) | ||||
| 			if len(parserResults) == 0 { | ||||
| 				parserResults = tmpParserResults | ||||
|  | @ -59,16 +62,13 @@ func Run(stages []Stage) (stageResults []StageResult, err error) { | |||
| 					parserResults[i].Comment += tmpParserResults[i].Comment | ||||
| 				} | ||||
| 			} | ||||
| 			if forceQuit { | ||||
| 				slog.Error("parser force quit", "name", stageParser.Name) | ||||
| 			} | ||||
| 		} | ||||
| 		stageResults = append(stageResults, StageResult{ | ||||
| 			Name:      stage.Name, | ||||
| 			Results:   parserResults, | ||||
| 			ForceQuit: stageForceQuit, | ||||
| 			ForceQuit: forceQuit, | ||||
| 		}) | ||||
| 		if stageForceQuit { | ||||
| 		if forceQuit { | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user