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