From 7bd216efda0a18ed72021efa7206a984ae1a09a2 Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Sat, 27 Sep 2025 01:01:17 -0700 Subject: [PATCH] chore: flatten nested conf fields --- cmd/joj3/conf/conf.go | 21 ++++++++++++--------- cmd/joj3/conf/model.go | 23 +++++++++++++++-------- cmd/joj3/main.go | 27 ++++++++++++++++++++++++++- cmd/joj3/stage.go | 16 ++++++++-------- 4 files changed, 61 insertions(+), 26 deletions(-) diff --git a/cmd/joj3/conf/conf.go b/cmd/joj3/conf/conf.go index 8755099..f75a4d8 100644 --- a/cmd/joj3/conf/conf.go +++ b/cmd/joj3/conf/conf.go @@ -183,20 +183,23 @@ func MatchGroups(conf *Conf, conventionalCommit *ConventionalCommit) []string { keywords := []string{} loweredCommitGroup := strings.ToLower(conventionalCommit.Group) if loweredCommitGroup == "all" { - for i := range conf.Stage.PreStages { - conf.Stage.PreStages[i].Group = "" + for i := range conf.PreStages { + conf.PreStages[i].Group = "" + conf.PreStages[i].Groups = nil } - for i := range conf.Stage.Stages { - conf.Stage.Stages[i].Group = "" + for i := range conf.Stages { + conf.Stages[i].Group = "" + conf.Stages[i].Groups = nil } - for i := range conf.Stage.PostStages { - conf.Stage.PostStages[i].Group = "" + for i := range conf.PostStages { + conf.PostStages[i].Group = "" + conf.PostStages[i].Groups = nil } } confStages := []ConfStage{} - confStages = append(confStages, conf.Stage.PreStages...) - confStages = append(confStages, conf.Stage.Stages...) - confStages = append(confStages, conf.Stage.PostStages...) + confStages = append(confStages, conf.PreStages...) + confStages = append(confStages, conf.Stages...) + confStages = append(confStages, conf.PostStages...) for _, stage := range confStages { if stage.Group != "" { keyword := strings.ToLower(stage.Group) diff --git a/cmd/joj3/conf/model.go b/cmd/joj3/conf/model.go index 6329c1f..04878db 100644 --- a/cmd/joj3/conf/model.go +++ b/cmd/joj3/conf/model.go @@ -22,14 +22,21 @@ type ConfStage struct { } type Conf struct { - Name string `default:"unknown"` - LogPath string `default:""` - ActorCsvPath string `default:""` - MaxTotalScore int `default:"-1"` - Stage struct { - SandboxExecServer string `default:"localhost:5051"` - SandboxToken string `default:""` - OutputPath string `default:"joj3_result.json"` + Name string `default:"unknown"` + LogPath string `default:""` + ActorCsvPath string `default:""` + MaxTotalScore int `default:"-1"` + SandboxExecServer string `default:"localhost:5051"` + SandboxToken string `default:""` + OutputPath string `default:"joj3_result.json"` + PreStages []ConfStage + Stages []ConfStage + PostStages []ConfStage + // TODO: remove this nested struct + Stage struct { + SandboxExecServer string + SandboxToken string + OutputPath string PreStages []ConfStage Stages []ConfStage PostStages []ConfStage diff --git a/cmd/joj3/main.go b/cmd/joj3/main.go index d108ad9..e0ec906 100644 --- a/cmd/joj3/main.go +++ b/cmd/joj3/main.go @@ -53,7 +53,7 @@ func getConf(commitMsg string) (*joj3Conf.Conf, *joj3Conf.ConventionalCommit, er return nil, nil, err } env.SetConfName(conf.Name) - env.SetOutputPath(conf.Stage.OutputPath) + env.SetOutputPath(conf.OutputPath) if err := showConfStat(confPath, confStat); err != nil { return nil, nil, err } @@ -78,6 +78,31 @@ func loadConf(confPath string) (*joj3Conf.Conf, error) { slog.Error("parse conf", "error", err) return nil, err } + // TODO: remove this compatible code for nested struct + if conf.Stage.SandboxExecServer != "" { + conf.SandboxExecServer = conf.Stage.SandboxExecServer + conf.Stage.SandboxExecServer = "" + } + if conf.Stage.SandboxToken != "" { + conf.SandboxToken = conf.Stage.SandboxToken + conf.Stage.SandboxToken = "" + } + if conf.Stage.OutputPath != "" { + conf.OutputPath = conf.Stage.OutputPath + conf.Stage.OutputPath = "" + } + if len(conf.Stage.PreStages) > 0 { + conf.PreStages = conf.Stage.PreStages + conf.Stage.PreStages = nil + } + if len(conf.Stage.Stages) > 0 { + conf.Stages = conf.Stage.Stages + conf.Stage.Stages = nil + } + if len(conf.Stage.PostStages) > 0 { + conf.PostStages = conf.Stage.PostStages + conf.Stage.PostStages = nil + } slog.Debug("conf loaded", "conf", conf, "joj3 version", Version) return conf, nil } diff --git a/cmd/joj3/stage.go b/cmd/joj3/stage.go index 4dfb7e9..f4901d3 100644 --- a/cmd/joj3/stage.go +++ b/cmd/joj3/stage.go @@ -137,22 +137,22 @@ func runStages( stageResults []stage.StageResult, forceQuitStageName string, err error, ) { executor.InitWithConf( - conf.Stage.SandboxExecServer, - conf.Stage.SandboxToken, + conf.SandboxExecServer, + conf.SandboxToken, ) - preStages, err := generateStages(conf.Stage.PreStages, groups) + preStages, err := generateStages(conf.PreStages, groups) if err != nil { slog.Error("generate preStages", "error", err) stageResults, forceQuitStageName = newErrorStageResults(err) return stageResults, forceQuitStageName, err } - stages, err := generateStages(conf.Stage.Stages, groups) + stages, err := generateStages(conf.Stages, groups) if err != nil { slog.Error("generate stages", "error", err) stageResults, forceQuitStageName = newErrorStageResults(err) return stageResults, forceQuitStageName, err } - postStages, err := generateStages(conf.Stage.PostStages, groups) + postStages, err := generateStages(conf.PostStages, groups) if err != nil { slog.Error("generate postStages", "error", err) stageResults, forceQuitStageName = newErrorStageResults(err) @@ -172,14 +172,14 @@ func runStages( stageResults, forceQuitStageName = newErrorStageResults(err) } onStagesComplete(stageResults, forceQuitStageName) - slog.Info("output result start", "path", conf.Stage.OutputPath) + slog.Info("output result start", "path", conf.OutputPath) slog.Debug("output result start", - "path", conf.Stage.OutputPath, "results", stageResults) + "path", conf.OutputPath, "results", stageResults) content, err := json.Marshal(stageResults) if err != nil { slog.Error("marshal stageResults", "error", err) } - err = os.WriteFile(conf.Stage.OutputPath, + err = os.WriteFile(conf.OutputPath, append(content, []byte("\n")...), 0o600) if err != nil { slog.Error("write stageResults", "error", err)