feat(cmd/joj3): return non-zero on force quit #63
| 
						 | 
					@ -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