feat(cmd/joj3): return non-zero on force quit
All checks were successful
build / build (push) Successful in 1m6s
build / build (pull_request) Successful in 1m5s
build / trigger-build-image (push) Has been skipped
build / trigger-build-image (pull_request) Has been skipped

This commit is contained in:
张泊明518370910136 2024-10-17 21:03:23 -04:00
parent f6960b21f2
commit 17fb9d4ca7
GPG Key ID: D47306D7062CDA9D
4 changed files with 24 additions and 19 deletions

View File

@ -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
} }

View File

@ -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"

View File

@ -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
} }

View File

@ -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
} }
} }