From 648fe7d0a4f39841ac37ddcfe60424a4eb8a245d Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Thu, 5 Dec 2024 07:35:40 -0500 Subject: [PATCH] feat(cmd/teapot-checker): only block used groups --- cmd/joj3/stage/run.go | 16 +++++++++++--- cmd/teapot-checker/main.go | 44 ++++++++++++++++++++++++++++++++------ internal/conf/conf.go | 4 ++-- internal/conf/conf_test.go | 2 +- 4 files changed, 53 insertions(+), 13 deletions(-) diff --git a/cmd/joj3/stage/run.go b/cmd/joj3/stage/run.go index e89ee9c..afcbc2e 100644 --- a/cmd/joj3/stage/run.go +++ b/cmd/joj3/stage/run.go @@ -22,9 +22,8 @@ func generateStages(conf *conf.Conf, groups []string) ([]stage.Stage, error) { for _, s := range conf.Stage.Stages { if s.Group != "" { var ok bool - loweredStageGroup := strings.ToLower(s.Group) for _, group := range groups { - if group == loweredStageGroup { + if strings.EqualFold(group, s.Group) { ok = true break } @@ -134,6 +133,7 @@ func newErrorStageResults(err error) ([]stage.StageResult, string) { func newTeapotCheckStageResults( checkResults []teapot.CheckResult, + groups []string, ) (stageResults []stage.StageResult, forceQuitStageName string, err error) { if len(checkResults) == 0 { return @@ -141,8 +141,17 @@ func newTeapotCheckStageResults( comment := "" forceQuit := false for _, checkResult := range checkResults { + useGroup := false if checkResult.Name != "" { comment += fmt.Sprintf("keyword `%s` ", checkResult.Name) + } else { + useGroup = true + } + for _, group := range groups { + if strings.EqualFold(group, checkResult.Name) { + useGroup = true + break + } } comment += fmt.Sprintf( "in last %d hour(s): submit count %d, max count %d\n", @@ -150,7 +159,7 @@ func newTeapotCheckStageResults( checkResult.SubmitCount, checkResult.MaxCount, ) - if checkResult.SubmitCount+1 > checkResult.MaxCount { + if useGroup && checkResult.SubmitCount+1 > checkResult.MaxCount { forceQuit = true err = fmt.Errorf("submit count exceeded") } @@ -176,6 +185,7 @@ func Run( ) { stageResults, forceQuitStageName, err = newTeapotCheckStageResults( checkResults, + groups, ) if err != nil { slog.Error("teapot check", "error", err) diff --git a/cmd/teapot-checker/main.go b/cmd/teapot-checker/main.go index 59e44ca..a24c7a0 100644 --- a/cmd/teapot-checker/main.go +++ b/cmd/teapot-checker/main.go @@ -65,13 +65,25 @@ func check(conf *conf.Conf) (checkResults []CheckResult, err error) { return } -func generateOutput(checkResults []CheckResult) (comment string, err error) { +func generateOutput( + checkResults []CheckResult, + groups []string, +) (comment string, err error) { if len(checkResults) == 0 { return } for _, checkResult := range checkResults { + useGroup := false if checkResult.Name != "" { comment += fmt.Sprintf("keyword `%s` ", checkResult.Name) + } else { + useGroup = true + } + for _, group := range groups { + if strings.EqualFold(group, checkResult.Name) { + useGroup = true + break + } } comment += fmt.Sprintf( "in last %d hour(s): submit count %d, max count %d\n", @@ -79,7 +91,7 @@ func generateOutput(checkResults []CheckResult) (comment string, err error) { checkResult.SubmitCount, checkResult.MaxCount, ) - if checkResult.SubmitCount+1 > checkResult.MaxCount { + if useGroup && checkResult.SubmitCount+1 > checkResult.MaxCount { err = fmt.Errorf("submit count exceeded") } } @@ -98,7 +110,7 @@ var ( Version string = "debug" ) -func main() { +func mainImpl() (err error) { showVersion := flag.Bool("version", false, "print current version") flag.StringVar(&confPath, "conf-path", "./conf.json", "path for config file") flag.Parse() @@ -108,21 +120,39 @@ func main() { } setupSlog() slog.Info("start teapot-checker", "version", Version) + commitMsg, err := conf.GetCommitMsg() + if err != nil { + slog.Error("get commit msg", "error", err) + return + } + conventionalCommit, err := conf.ParseConventionalCommit(commitMsg) + if err != nil { + slog.Error("parse commit msg", "error", err) + return + } confObj, _, err := conf.ParseConfFile(confPath) if err != nil { slog.Error("parse conf", "error", err) return } + groups := conf.MatchGroups(confObj, conventionalCommit) checkResults, err := check(confObj) if err != nil { slog.Error("teapot check", "error", err) return } - exitCode := 0 - output, err := generateOutput(checkResults) + output, err := generateOutput(checkResults, groups) if err != nil { - exitCode = 1 + slog.Error("generate output", "error", err) + return } fmt.Println(output) - os.Exit(exitCode) + return +} + +func main() { + if err := mainImpl(); err != nil { + slog.Error("main exit", "error", err) + os.Exit(1) + } } diff --git a/internal/conf/conf.go b/internal/conf/conf.go index c0a1ed2..f001a35 100644 --- a/internal/conf/conf.go +++ b/internal/conf/conf.go @@ -147,7 +147,7 @@ func GetCommitMsg() (msg string, err error) { return } -func parseConventionalCommit(commit string) (*ConventionalCommit, error) { +func ParseConventionalCommit(commit string) (*ConventionalCommit, error) { re := regexp.MustCompile(`(?s)^(\w+)(\(([^)]+)\))?!?: (.+?(\[([^\]]+)\])?)(\n\n(.+?))?(\n\n(.+))?$`) matches := re.FindStringSubmatch(strings.TrimSpace(commit)) if matches == nil { @@ -237,7 +237,7 @@ func parseMsg(confRoot, confName, msg, tag string) ( confPath string, conventionalCommit *ConventionalCommit, err error, ) { slog.Info("parse msg", "msg", msg) - conventionalCommit, err = parseConventionalCommit(msg) + conventionalCommit, err = ParseConventionalCommit(msg) if err != nil { return } diff --git a/internal/conf/conf_test.go b/internal/conf/conf_test.go index 653c7e1..0002f9a 100644 --- a/internal/conf/conf_test.go +++ b/internal/conf/conf_test.go @@ -119,7 +119,7 @@ func TestParseConventionalCommit(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := parseConventionalCommit(tt.commit) + got, err := ParseConventionalCommit(tt.commit) if (err != nil) != tt.wantErr { t.Errorf("ParseConventionalCommit() error = %v, wantErr %v", err, tt.wantErr) return