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

View File

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

View File

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

View File

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