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