From 454df2c6fcf142bec74d2783590a4c0cbcc73d34 Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Wed, 29 Jan 2025 08:13:02 -0500 Subject: [PATCH] feat(conf): pre-stages and post-stages (#83) --- cmd/joj3/stage/run.go | 33 +++++++++++++++++++++++++++++---- internal/conf/conf.go | 16 ++++++++++++++-- internal/conf/model.go | 2 ++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/cmd/joj3/stage/run.go b/cmd/joj3/stage/run.go index 1e62441..9867aeb 100644 --- a/cmd/joj3/stage/run.go +++ b/cmd/joj3/stage/run.go @@ -15,10 +15,12 @@ import ( type StageResult stage.StageResult -func generateStages(conf *conf.Conf, groups []string) ([]stage.Stage, error) { +func generateStages(confStages []conf.ConfStage, groups []string) ( + []stage.Stage, error, +) { stages := []stage.Stage{} existNames := map[string]bool{} - for _, s := range conf.Stage.Stages { + for _, s := range confStages { if s.Group != "" { var ok bool for _, group := range groups { @@ -137,18 +139,41 @@ func Run(conf *conf.Conf, groups []string) ( conf.Stage.SandboxExecServer, conf.Stage.SandboxToken, ) - stages, err := generateStages(conf, groups) + preStages, err := generateStages(conf.Stage.PreStages, groups) + if err != nil { + slog.Error("generate preStages", "error", err) + stageResults, forceQuitStageName = newErrorStageResults(err) + return + } + stages, err := generateStages(conf.Stage.Stages, groups) if err != nil { slog.Error("generate stages", "error", err) stageResults, forceQuitStageName = newErrorStageResults(err) return } + postStages, err := generateStages(conf.Stage.PostStages, groups) + if err != nil { + slog.Error("generate postStages", "error", err) + stageResults, forceQuitStageName = newErrorStageResults(err) + return + } defer stage.Cleanup() + // ignore force quit in preStages & postStages + slog.Info("run preStages") + _, _, err = stage.Run(preStages) + if err != nil { + slog.Error("run preStages", "error", err) + } + slog.Info("run stages") stageResults, forceQuitStageName, err = stage.Run(stages) if err != nil { slog.Error("run stages", "error", err) stageResults, forceQuitStageName = newErrorStageResults(err) - return + } + slog.Info("run postStages") + _, _, err = stage.Run(postStages) + if err != nil { + slog.Error("run postStages", "error", err) } return } diff --git a/internal/conf/conf.go b/internal/conf/conf.go index c6fc558..cdb05b9 100644 --- a/internal/conf/conf.go +++ b/internal/conf/conf.go @@ -186,10 +186,22 @@ func MatchGroups(conf *Conf, conventionalCommit *ConventionalCommit) []string { seen := make(map[string]bool) keywords := []string{} loweredCommitGroup := strings.ToLower(conventionalCommit.Group) - for i, stage := range conf.Stage.Stages { - if loweredCommitGroup == "all" { + if loweredCommitGroup == "all" { + for i := range conf.Stage.PreStages { + conf.Stage.PreStages[i].Group = "" + } + for i := range conf.Stage.Stages { conf.Stage.Stages[i].Group = "" } + for i := range conf.Stage.PostStages { + conf.Stage.PostStages[i].Group = "" + } + } + confStages := []ConfStage{} + confStages = append(confStages, conf.Stage.PreStages...) + confStages = append(confStages, conf.Stage.Stages...) + confStages = append(confStages, conf.Stage.PostStages...) + for _, stage := range confStages { if stage.Group == "" { continue } diff --git a/internal/conf/model.go b/internal/conf/model.go index af20477..5f09458 100644 --- a/internal/conf/model.go +++ b/internal/conf/model.go @@ -36,7 +36,9 @@ type Conf struct { SandboxExecServer string `default:"localhost:5051"` SandboxToken string `default:""` OutputPath string `default:"joj3_result.json"` + PreStages []ConfStage Stages []ConfStage + PostStages []ConfStage } Teapot struct { LogPath string `default:"/home/tt/.cache/joint-teapot-debug.log"`