From 116e2fa30a84fbfe10a5d917f53d55d8046ab967 Mon Sep 17 00:00:00 2001 From: yangwei999 <348134071@qq.com> Date: Sat, 30 Aug 2025 11:42:39 +0800 Subject: [PATCH] unmerged branch hint after comment --- cve-vulner-manager/controllers/hook.go | 14 +++++++++ cve-vulner-manager/models/issue.go | 40 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/cve-vulner-manager/controllers/hook.go b/cve-vulner-manager/controllers/hook.go index f84f12a..ae7ff2a 100644 --- a/cve-vulner-manager/controllers/hook.go +++ b/cve-vulner-manager/controllers/hook.go @@ -2496,6 +2496,8 @@ func StateByAllReason(issue *models.IssueTemplate) ([]string, error) { allState = append(allState, StateFromReason(v, mergedPR)) } + RemindUnmergedBranch(issue, mergedPR) + return allState, nil } @@ -2564,3 +2566,15 @@ func StateFromReason(branchAndReason string, mergedPR []string) string { return common.StateProcessing } } + +func RemindUnmergedBranch(issue *models.IssueTemplate, mergedBranch []string) { + willFixBranchSets := sets.NewString(issue.WillFixBranch()...) + mergedBranchSets := sets.NewString(mergedBranch...) + unmergedBranchSets := willFixBranchSets.Difference(mergedBranchSets) + if len(unmergedBranchSets) == 0 { + return + } + + msg := fmt.Sprintf("尚未合入PR的分支:%s", strings.Join(unmergedBranchSets.List(), ",")) + issue.AddCommentToIssue(msg) +} diff --git a/cve-vulner-manager/models/issue.go b/cve-vulner-manager/models/issue.go index 1c3e036..e26a4ad 100644 --- a/cve-vulner-manager/models/issue.go +++ b/cve-vulner-manager/models/issue.go @@ -1,6 +1,7 @@ package models import ( + "encoding/json" "errors" "fmt" "strings" @@ -816,6 +817,24 @@ func (t *IssueTemplate) ContainsWillFix() bool { return strings.Contains(t.AnalysisVersion, common.AnalysisWillFix) } +func (t *IssueTemplate) WillFixBranch() []string { + var data []string + const splitLen = 2 + split := strings.Split(t.AnalysisVersion, ",") + for _, v := range split { + item := strings.Split(strings.ReplaceAll(v, ":", ":"), ":") + if len(item) != splitLen { + continue + } + + if item[1] == common.AnalysisWillFix { + data = append(data, item[0]) + } + } + + return data +} + // IsAllUnaffected splits the AnalysisVersion by commas and checks if all parts are unaffected. func (t *IssueTemplate) IsAllUnaffected() bool { const splitLen = 2 @@ -859,3 +878,24 @@ func (t *IssueTemplate) HasBranch(branch string) bool { return false } + +type CommentParam struct { + AccessToken string `json:"access_token"` + Body string `json:"body"` +} + +func (t *IssueTemplate) AddCommentToIssue(msg string) { + owner := beego.AppConfig.String("gitee::owner") + accessToken := beego.AppConfig.String("gitee::git_token") + url := fmt.Sprintf(`https://gitee.com/api/v5/repos/%v/%v/issues/%v/comments`, owner, t.Repo, t.IssueNum) + param := CommentParam{ + AccessToken: accessToken, + Body: msg, + } + + body, _ := json.Marshal(param) + _, err := util.HTTPPost(url, string(body)) + if err != nil { + logs.Error("add2 comment to issue num failed ", t.IssueNum, err) + } +} -- Gitee