feat(cmd/joj3): create result issue on stage run error
This commit is contained in:
parent
6f3ba1500a
commit
6cb6cb1f67
|
@ -69,9 +69,12 @@ func mainImpl() error {
|
||||||
slog.Error("conf check expire", "error", err)
|
slog.Error("conf check expire", "error", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
stageForceQuit, err := stage.Run(confObj, group)
|
stageResults, stageForceQuit, err := stage.Run(confObj, group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("stage run", "error", err)
|
slog.Error("stage run", "error", err)
|
||||||
|
}
|
||||||
|
if err = stage.Write(confObj.Stage.OutputPath, stageResults); err != nil {
|
||||||
|
slog.Error("stage write", "error", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := teapot.Run(confObj); err != nil {
|
if err := teapot.Run(confObj); err != nil {
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
package stage
|
package stage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/joint-online-judge/JOJ3/cmd/joj3/conf"
|
"github.com/joint-online-judge/JOJ3/cmd/joj3/conf"
|
||||||
executors "github.com/joint-online-judge/JOJ3/internal/executor"
|
executors "github.com/joint-online-judge/JOJ3/internal/executor"
|
||||||
|
@ -70,18 +68,19 @@ func generateStages(conf *conf.Conf, group string) ([]stage.Stage, error) {
|
||||||
return stages, nil
|
return stages, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func outputResult(outputPath string, results []stage.StageResult) error {
|
func Run(conf *conf.Conf, group string) (
|
||||||
slog.Info("output result start", "path", outputPath)
|
stageResults []stage.StageResult, forceQuit bool, err error,
|
||||||
slog.Debug("output result start", "path", outputPath, "results", results)
|
) {
|
||||||
content, err := json.Marshal(results)
|
stageResultsOnError := []stage.StageResult{
|
||||||
if err != nil {
|
{
|
||||||
return err
|
Name: "Internal Error",
|
||||||
|
Results: []stage.ParserResult{{
|
||||||
|
Score: 0,
|
||||||
|
Comment: "JOJ3 internal error, check the log in Gitea Actions.",
|
||||||
|
}},
|
||||||
|
ForceQuit: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return os.WriteFile(outputPath,
|
|
||||||
append(content, []byte("\n")...), 0o600)
|
|
||||||
}
|
|
||||||
|
|
||||||
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,16 +88,16 @@ func Run(conf *conf.Conf, group string) (forceQuit bool, err 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)
|
||||||
|
stageResults = stageResultsOnError
|
||||||
|
forceQuit = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer stage.Cleanup()
|
defer stage.Cleanup()
|
||||||
results, forceQuit, err := stage.Run(stages)
|
stageResults, forceQuit, err = stage.Run(stages)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("run stages", "error", err)
|
slog.Error("run stages", "error", err)
|
||||||
return
|
stageResults = stageResultsOnError
|
||||||
}
|
forceQuit = true
|
||||||
if err = outputResult(conf.Stage.OutputPath, results); err != nil {
|
|
||||||
slog.Error("output result", "error", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
20
cmd/joj3/stage/write.go
Normal file
20
cmd/joj3/stage/write.go
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package stage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/joint-online-judge/JOJ3/internal/stage"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Write(outputPath string, results []stage.StageResult) error {
|
||||||
|
slog.Info("output result start", "path", outputPath)
|
||||||
|
slog.Debug("output result start", "path", outputPath, "results", results)
|
||||||
|
content, err := json.Marshal(results)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return os.WriteFile(outputPath,
|
||||||
|
append(content, []byte("\n")...), 0o600)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user