diff --git a/cmd/joj3/conf/conf.go b/cmd/joj3/conf/conf.go index 5d3478c..72fb036 100644 --- a/cmd/joj3/conf/conf.go +++ b/cmd/joj3/conf/conf.go @@ -13,28 +13,30 @@ import ( "github.com/koding/multiconfig" ) +type ConfStage struct { + Name string + Group string + Executor struct { + Name string + With struct { + Default stage.Cmd + Cases []OptionalCmd + } + } + Parsers []struct { + Name string + With interface{} + } +} + type Conf struct { Name string `default:"unknown"` LogPath string `default:""` Stage struct { SandboxExecServer string `default:"localhost:5051"` SandboxToken string `default:""` - OutputPath string `default:"stages_result.json"` - Stages []struct { - Name string - Group string - Executor struct { - Name string - With struct { - Default stage.Cmd - Cases []OptionalCmd - } - } - Parsers []struct { - Name string - With interface{} - } - } + OutputPath string `default:"joj3_result.json"` + Stages []ConfStage } Teapot struct { LogPath string `default:"/home/tt/.cache/joint-teapot-debug.log"` @@ -45,6 +47,29 @@ type Conf struct { SkipScoreboard bool `default:"false"` SkipFailedTable bool `default:"false"` } + // TODO: remove the following backward compatibility fields + SandboxExecServer string `default:"localhost:5051"` + SandboxToken string `default:""` + OutputPath string `default:"joj3_result.json"` + GradingRepoName string `default:""` + SkipTeapot bool `default:"true"` + ScoreboardPath string `default:"scoreboard.csv"` + FailedTablePath string `default:"failed-table.md"` + Stages []struct { + Name string + Group string + Executor struct { + Name string + With struct { + Default stage.Cmd + Cases []OptionalCmd + } + } + Parser struct { + Name string + With interface{} + } + } } type OptionalCmd struct { @@ -134,6 +159,25 @@ func parseConfFile(path string) (conf Conf, err error) { slog.Error("validate stages conf", "error", err) return } + // TODO: remove the following backward compatibility codes + conf.Stage.SandboxExecServer = conf.SandboxExecServer + conf.Stage.SandboxToken = conf.SandboxToken + conf.Stage.OutputPath = conf.OutputPath + conf.Stage.Stages = make([]ConfStage, len(conf.Stages)) + for i, stage := range conf.Stages { + conf.Stage.Stages[i].Name = stage.Name + conf.Stage.Stages[i].Group = stage.Group + conf.Stage.Stages[i].Executor = stage.Executor + conf.Stage.Stages[i].Parsers = []struct { + Name string + With interface{} + }{ + { + Name: stage.Parser.Name, + With: stage.Parser.With, + }, + } + } return }