From 17fb9d4ca7b40c3c390c4dacb64a6977fc60bd8c Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Thu, 17 Oct 2024 21:03:23 -0400 Subject: [PATCH] feat(cmd/joj3): return non-zero on force quit --- cmd/joj3/main.go | 7 ++++++- cmd/joj3/main_test.go | 2 +- cmd/joj3/stage/run.go | 14 +++++++------- internal/stage/run.go | 20 ++++++++++---------- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/cmd/joj3/main.go b/cmd/joj3/main.go index 4fe6b1e..de7d00a 100644 --- a/cmd/joj3/main.go +++ b/cmd/joj3/main.go @@ -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 } diff --git a/cmd/joj3/main_test.go b/cmd/joj3/main_test.go index ea442fc..a2badc2 100644 --- a/cmd/joj3/main_test.go +++ b/cmd/joj3/main_test.go @@ -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" diff --git a/cmd/joj3/stage/run.go b/cmd/joj3/stage/run.go index ad57132..0f8f944 100644 --- a/cmd/joj3/stage/run.go +++ b/cmd/joj3/stage/run.go @@ -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 } diff --git a/internal/stage/run.go b/internal/stage/run.go index b303e7c..88bf1f0 100644 --- a/internal/stage/run.go +++ b/internal/stage/run.go @@ -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 } } -- 2.30.2