From 7e12c333b57f90b365153319a4b148e11d816fe8 Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Wed, 24 Sep 2025 03:13:17 -0700 Subject: [PATCH] feat: support groups in stages --- cmd/joj3/conf/conf.go | 20 ++++++++++++++------ cmd/joj3/conf/model.go | 3 ++- cmd/joj3/stage.go | 21 +++++++++++++++++---- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/cmd/joj3/conf/conf.go b/cmd/joj3/conf/conf.go index 13f9a21..8755099 100644 --- a/cmd/joj3/conf/conf.go +++ b/cmd/joj3/conf/conf.go @@ -198,13 +198,21 @@ func MatchGroups(conf *Conf, conventionalCommit *ConventionalCommit) []string { confStages = append(confStages, conf.Stage.Stages...) confStages = append(confStages, conf.Stage.PostStages...) for _, stage := range confStages { - if stage.Group == "" { - continue + if stage.Group != "" { + keyword := strings.ToLower(stage.Group) + if _, exists := seen[keyword]; !exists { + seen[keyword] = true + keywords = append(keywords, keyword) + } } - keyword := strings.ToLower(stage.Group) - if _, exists := seen[keyword]; !exists { - seen[keyword] = true - keywords = append(keywords, keyword) + if len(stage.Groups) > 0 { + for _, group := range stage.Groups { + keyword := strings.ToLower(group) + if _, exists := seen[keyword]; !exists { + seen[keyword] = true + keywords = append(keywords, keyword) + } + } } } slog.Info("group keywords from stages", "keywords", keywords) diff --git a/cmd/joj3/conf/model.go b/cmd/joj3/conf/model.go index 230b021..6329c1f 100644 --- a/cmd/joj3/conf/model.go +++ b/cmd/joj3/conf/model.go @@ -6,7 +6,8 @@ import ( type ConfStage struct { Name string - Group string + Group string // TODO: remove Group in the future + Groups []string Executor struct { Name string With struct { diff --git a/cmd/joj3/stage.go b/cmd/joj3/stage.go index da9e328..6950118 100644 --- a/cmd/joj3/stage.go +++ b/cmd/joj3/stage.go @@ -47,19 +47,32 @@ func generateStages(confStages []conf.ConfStage, groups []string) ( if s.Name == "" { s.Name = fmt.Sprintf("stage-%d", i) } + var ok bool if s.Group != "" { - var ok bool for _, group := range groups { if strings.EqualFold(group, s.Group) { ok = true break } } - if !ok { - continue + } + if !ok && len(s.Groups) > 0 { + for _, group := range groups { + for _, g := range s.Groups { + if strings.EqualFold(group, g) { + ok = true + break + } + } + if ok { + break + } } } - _, ok := existNames[s.Name] // check for existence + if !ok { + continue + } + _, ok = existNames[s.Name] // check for existence if ok { continue }