You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by ma...@apache.org on 2022/07/04 09:17:20 UTC

[incubator-devlake] branch main updated: fix: fix mustcompile lost error msg (#2405)

This is an automated email from the ASF dual-hosted git repository.

mappjzc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 721bb5ef fix: fix mustcompile lost error msg (#2405)
721bb5ef is described below

commit 721bb5ef857e56e729959f46557e42dae9deed2f
Author: mappjzc <zh...@merico.dev>
AuthorDate: Mon Jul 4 17:17:16 2022 +0800

    fix: fix mustcompile lost error msg (#2405)
    
    changed MustCompile to Compile and add detail info to err.
    
    Nddtfjiang <zh...@merico.dev>
---
 config/config.go                                   |  7 +++--
 plugins/gitee/tasks/issue_extractor.go             | 33 ++++++++++++++++++----
 plugins/gitee/tasks/pr_extractor.go                | 13 +++++++--
 plugins/gitee/tasks/pr_issue_enricher.go           |  7 ++++-
 plugins/github/tasks/issue_extractor.go            | 33 ++++++++++++++++++----
 plugins/github/tasks/pr_extractor.go               | 13 +++++++--
 plugins/github/tasks/pr_issue_enricher.go          |  7 ++++-
 plugins/gitlab/tasks/issue_extractor.go            | 33 ++++++++++++++++++----
 plugins/gitlab/tasks/mr_extractor.go               | 13 +++++++--
 plugins/jira/tasks/issue_repo_commit_convertor.go  | 11 ++++++--
 plugins/jira/tasks/remotelink_extractor.go         |  8 +++++-
 .../tasks/refs_pr_cherry_pick_calculator.go        |  9 ++++--
 12 files changed, 153 insertions(+), 34 deletions(-)

diff --git a/config/config.go b/config/config.go
index 02fad7cf..ec2edc07 100644
--- a/config/config.go
+++ b/config/config.go
@@ -21,6 +21,7 @@ import (
 	"errors"
 	"fmt"
 	"os"
+	"runtime/debug"
 
 	"path/filepath"
 	"regexp"
@@ -88,9 +89,9 @@ func replaceNewEnvItemInOldContent(v *viper.Viper, envFileContent string) (error
 		encodeEnvName := encodeEnvNameReg.ReplaceAllStringFunc(envName, func(s string) string {
 			return fmt.Sprintf(`\%v`, s)
 		})
-		envItemReg := regexp.MustCompile(fmt.Sprintf(`(?im)^\s*%v\s*\=.*$`, encodeEnvName))
-		if envItemReg == nil {
-			return fmt.Errorf("regexp err"), ``
+		envItemReg, err := regexp.Compile(fmt.Sprintf(`(?im)^\s*%v\s*\=.*$`, encodeEnvName))
+		if err != nil {
+			return fmt.Errorf("regexp Compile failed:[%s] stack:[%s]", err.Error(), debug.Stack()), ``
 		}
 		envFileContent = envItemReg.ReplaceAllStringFunc(envFileContent, func(s string) string {
 			switch ret := val.(type) {
diff --git a/plugins/gitee/tasks/issue_extractor.go b/plugins/gitee/tasks/issue_extractor.go
index c37476ec..7072afb2 100644
--- a/plugins/gitee/tasks/issue_extractor.go
+++ b/plugins/gitee/tasks/issue_extractor.go
@@ -19,7 +19,9 @@ package tasks
 
 import (
 	"encoding/json"
+	"fmt"
 	"regexp"
+	"runtime/debug"
 
 	"github.com/apache/incubator-devlake/models/domainlayer/ticket"
 	"github.com/apache/incubator-devlake/plugins/core"
@@ -104,28 +106,47 @@ func ExtractApiIssues(taskCtx core.SubTaskContext) error {
 	var issueTypeRequirementRegex *regexp.Regexp
 	var issueTypeIncidentRegex *regexp.Regexp
 	var issueSeverity = config.IssueSeverity
+	var err error
 	if len(issueSeverity) > 0 {
-		issueSeverityRegex = regexp.MustCompile(issueSeverity)
+		issueSeverityRegex, err = regexp.Compile(issueSeverity)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueSeverity failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueComponent = config.IssueComponent
 	if len(issueComponent) > 0 {
-		issueComponentRegex = regexp.MustCompile(issueComponent)
+		issueComponentRegex, err = regexp.Compile(issueComponent)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueComponent failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issuePriority = config.IssuePriority
 	if len(issuePriority) > 0 {
-		issuePriorityRegex = regexp.MustCompile(issuePriority)
+		issuePriorityRegex, err = regexp.Compile(issuePriority)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issuePriority failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeBug = config.IssueTypeBug
 	if len(issueTypeBug) > 0 {
-		issueTypeBugRegex = regexp.MustCompile(issueTypeBug)
+		issueTypeBugRegex, err = regexp.Compile(issueTypeBug)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeBug failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeRequirement = config.IssueTypeRequirement
 	if len(issueTypeRequirement) > 0 {
-		issueTypeRequirementRegex = regexp.MustCompile(issueTypeRequirement)
+		issueTypeRequirementRegex, err = regexp.Compile(issueTypeRequirement)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeRequirement failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeIncident = config.IssueTypeIncident
 	if len(issueTypeIncident) > 0 {
-		issueTypeIncidentRegex = regexp.MustCompile(issueTypeIncident)
+		issueTypeIncidentRegex, err = regexp.Compile(issueTypeIncident)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeIncident failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 
 	extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
diff --git a/plugins/gitee/tasks/pr_extractor.go b/plugins/gitee/tasks/pr_extractor.go
index ffd2bd08..097e9b09 100644
--- a/plugins/gitee/tasks/pr_extractor.go
+++ b/plugins/gitee/tasks/pr_extractor.go
@@ -19,7 +19,9 @@ package tasks
 
 import (
 	"encoding/json"
+	"fmt"
 	"regexp"
+	"runtime/debug"
 
 	"github.com/apache/incubator-devlake/plugins/core"
 	"github.com/apache/incubator-devlake/plugins/gitee/models"
@@ -81,12 +83,19 @@ func ExtractApiPullRequests(taskCtx core.SubTaskContext) error {
 	var labelTypeRegex *regexp.Regexp
 	var labelComponentRegex *regexp.Regexp
 	var prType = config.PrType
+	var err error
 	if len(prType) > 0 {
-		labelTypeRegex = regexp.MustCompile(prType)
+		labelTypeRegex, err = regexp.Compile(prType)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prType failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var prComponent = config.PrComponent
 	if len(prComponent) > 0 {
-		labelComponentRegex = regexp.MustCompile(prComponent)
+		labelComponentRegex, err = regexp.Compile(prComponent)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prComponent failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 
 	extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
diff --git a/plugins/gitee/tasks/pr_issue_enricher.go b/plugins/gitee/tasks/pr_issue_enricher.go
index dff9ab5d..9dd4012d 100644
--- a/plugins/gitee/tasks/pr_issue_enricher.go
+++ b/plugins/gitee/tasks/pr_issue_enricher.go
@@ -18,8 +18,10 @@ limitations under the License.
 package tasks
 
 import (
+	"fmt"
 	"reflect"
 	"regexp"
+	"runtime/debug"
 	"strconv"
 	"strings"
 
@@ -48,7 +50,10 @@ func EnrichPullRequestIssues(taskCtx core.SubTaskContext) (err error) {
 	prBodyClosePattern = strings.Replace(prBodyClosePattern, "%s", data.Options.Owner, 1)
 	prBodyClosePattern = strings.Replace(prBodyClosePattern, "%s", data.Options.Repo, 1)
 	if len(prBodyClosePattern) > 0 {
-		prBodyCloseRegex = regexp.MustCompile(prBodyClosePattern)
+		prBodyCloseRegex, err = regexp.Compile(prBodyClosePattern)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prBodyClosePattern failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	charPattern := regexp.MustCompile(`[a-zA-Z\s,]+`)
 	cursor, err := db.Cursor(dal.From(&models.GiteePullRequest{}), dal.Where("repo_id = ?", repoId))
diff --git a/plugins/github/tasks/issue_extractor.go b/plugins/github/tasks/issue_extractor.go
index 5888e1f5..efbbf54a 100644
--- a/plugins/github/tasks/issue_extractor.go
+++ b/plugins/github/tasks/issue_extractor.go
@@ -19,7 +19,9 @@ package tasks
 
 import (
 	"encoding/json"
+	"fmt"
 	"regexp"
+	"runtime/debug"
 
 	"github.com/apache/incubator-devlake/models/domainlayer/ticket"
 	"github.com/apache/incubator-devlake/plugins/core"
@@ -67,28 +69,47 @@ func ExtractApiIssues(taskCtx core.SubTaskContext) error {
 	var issueTypeRequirementRegex *regexp.Regexp
 	var issueTypeIncidentRegex *regexp.Regexp
 	var issueSeverity = config.IssueSeverity
+	var err error
 	if len(issueSeverity) > 0 {
-		issueSeverityRegex = regexp.MustCompile(issueSeverity)
+		issueSeverityRegex, err = regexp.Compile(issueSeverity)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueSeverity failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueComponent = config.IssueComponent
 	if len(issueComponent) > 0 {
-		issueComponentRegex = regexp.MustCompile(issueComponent)
+		issueComponentRegex, err = regexp.Compile(issueComponent)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueComponent failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issuePriority = config.IssuePriority
 	if len(issuePriority) > 0 {
-		issuePriorityRegex = regexp.MustCompile(issuePriority)
+		issuePriorityRegex, err = regexp.Compile(issuePriority)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issuePriority failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeBug = config.IssueTypeBug
 	if len(issueTypeBug) > 0 {
-		issueTypeBugRegex = regexp.MustCompile(issueTypeBug)
+		issueTypeBugRegex, err = regexp.Compile(issueTypeBug)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeBug failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeRequirement = config.IssueTypeRequirement
 	if len(issueTypeRequirement) > 0 {
-		issueTypeRequirementRegex = regexp.MustCompile(issueTypeRequirement)
+		issueTypeRequirementRegex, err = regexp.Compile(issueTypeRequirement)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeRequirement failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeIncident = config.IssueTypeIncident
 	if len(issueTypeIncident) > 0 {
-		issueTypeIncidentRegex = regexp.MustCompile(issueTypeIncident)
+		issueTypeIncidentRegex, err = regexp.Compile(issueTypeIncident)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeIncident failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 
 	extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
diff --git a/plugins/github/tasks/pr_extractor.go b/plugins/github/tasks/pr_extractor.go
index c50f7b0a..a49e5834 100644
--- a/plugins/github/tasks/pr_extractor.go
+++ b/plugins/github/tasks/pr_extractor.go
@@ -19,7 +19,9 @@ package tasks
 
 import (
 	"encoding/json"
+	"fmt"
 	"regexp"
+	"runtime/debug"
 
 	"github.com/apache/incubator-devlake/plugins/core"
 	"github.com/apache/incubator-devlake/plugins/github/models"
@@ -67,12 +69,19 @@ func ExtractApiPullRequests(taskCtx core.SubTaskContext) error {
 	var labelTypeRegex *regexp.Regexp
 	var labelComponentRegex *regexp.Regexp
 	var prType = config.PrType
+	var err error
 	if len(prType) > 0 {
-		labelTypeRegex = regexp.MustCompile(prType)
+		labelTypeRegex, err = regexp.Compile(prType)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prType failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var prComponent = config.PrComponent
 	if len(prComponent) > 0 {
-		labelComponentRegex = regexp.MustCompile(prComponent)
+		labelComponentRegex, err = regexp.Compile(prComponent)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prComponent failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 
 	extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
diff --git a/plugins/github/tasks/pr_issue_enricher.go b/plugins/github/tasks/pr_issue_enricher.go
index 510c0363..0cc66285 100644
--- a/plugins/github/tasks/pr_issue_enricher.go
+++ b/plugins/github/tasks/pr_issue_enricher.go
@@ -18,8 +18,10 @@ limitations under the License.
 package tasks
 
 import (
+	"fmt"
 	"reflect"
 	"regexp"
+	"runtime/debug"
 	"strconv"
 	"strings"
 
@@ -48,7 +50,10 @@ func EnrichPullRequestIssues(taskCtx core.SubTaskContext) (err error) {
 	prBodyClosePattern = strings.Replace(prBodyClosePattern, "%s", data.Options.Owner, 1)
 	prBodyClosePattern = strings.Replace(prBodyClosePattern, "%s", data.Options.Repo, 1)
 	if len(prBodyClosePattern) > 0 {
-		prBodyCloseRegex = regexp.MustCompile(prBodyClosePattern)
+		prBodyCloseRegex, err = regexp.Compile(prBodyClosePattern)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prBodyClosePattern failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	charPattern := regexp.MustCompile(`[a-zA-Z\s,]+`)
 	cursor, err := db.Cursor(dal.From(&githubModels.GithubPullRequest{}), dal.Where("repo_id = ?", repoId))
diff --git a/plugins/gitlab/tasks/issue_extractor.go b/plugins/gitlab/tasks/issue_extractor.go
index c3f49f98..31be638a 100644
--- a/plugins/gitlab/tasks/issue_extractor.go
+++ b/plugins/gitlab/tasks/issue_extractor.go
@@ -19,7 +19,9 @@ package tasks
 
 import (
 	"encoding/json"
+	"fmt"
 	"regexp"
+	"runtime/debug"
 	"strconv"
 
 	"github.com/apache/incubator-devlake/models/domainlayer/ticket"
@@ -138,28 +140,47 @@ func ExtractApiIssues(taskCtx core.SubTaskContext) error {
 	var issueTypeRequirementRegex *regexp.Regexp
 	var issueTypeIncidentRegex *regexp.Regexp
 	var issueSeverity = config.IssueSeverity
+	var err error
 	if len(issueSeverity) > 0 {
-		issueSeverityRegex = regexp.MustCompile(issueSeverity)
+		issueSeverityRegex, err = regexp.Compile(issueSeverity)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueSeverity failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueComponent = config.IssueComponent
 	if len(issueComponent) > 0 {
-		issueComponentRegex = regexp.MustCompile(issueComponent)
+		issueComponentRegex, err = regexp.Compile(issueComponent)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueComponent failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issuePriority = config.IssuePriority
 	if len(issuePriority) > 0 {
-		issuePriorityRegex = regexp.MustCompile(issuePriority)
+		issuePriorityRegex, err = regexp.Compile(issuePriority)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issuePriority failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeBug = config.IssueTypeBug
 	if len(issueTypeBug) > 0 {
-		issueTypeBugRegex = regexp.MustCompile(issueTypeBug)
+		issueTypeBugRegex, err = regexp.Compile(issueTypeBug)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeBug failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeRequirement = config.IssueTypeRequirement
 	if len(issueTypeRequirement) > 0 {
-		issueTypeRequirementRegex = regexp.MustCompile(issueTypeRequirement)
+		issueTypeRequirementRegex, err = regexp.Compile(issueTypeRequirement)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeRequirement failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var issueTypeIncident = config.IssueTypeIncident
 	if len(issueTypeIncident) > 0 {
-		issueTypeIncidentRegex = regexp.MustCompile(issueTypeIncident)
+		issueTypeIncidentRegex, err = regexp.Compile(issueTypeIncident)
+		if err != nil {
+			return fmt.Errorf("regexp Compile issueTypeIncident failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
 		RawDataSubTaskArgs: *rawDataSubTaskArgs,
diff --git a/plugins/gitlab/tasks/mr_extractor.go b/plugins/gitlab/tasks/mr_extractor.go
index fef6dad7..b0bde52e 100644
--- a/plugins/gitlab/tasks/mr_extractor.go
+++ b/plugins/gitlab/tasks/mr_extractor.go
@@ -19,7 +19,9 @@ package tasks
 
 import (
 	"encoding/json"
+	"fmt"
 	"regexp"
+	"runtime/debug"
 
 	"github.com/apache/incubator-devlake/plugins/core"
 	"github.com/apache/incubator-devlake/plugins/gitlab/models"
@@ -80,12 +82,19 @@ func ExtractApiMergeRequests(taskCtx core.SubTaskContext) error {
 	var labelTypeRegex *regexp.Regexp
 	var labelComponentRegex *regexp.Regexp
 	var prType = config.PrType
+	var err error
 	if len(prType) > 0 {
-		labelTypeRegex = regexp.MustCompile(prType)
+		labelTypeRegex, err = regexp.Compile(prType)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prType failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	var prComponent = config.PrComponent
 	if len(prComponent) > 0 {
-		labelComponentRegex = regexp.MustCompile(prComponent)
+		labelComponentRegex, err = regexp.Compile(prComponent)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prComponent failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 	extractor, err := helper.NewApiExtractor(helper.ApiExtractorArgs{
 		RawDataSubTaskArgs: *rawDataSubTaskArgs,
diff --git a/plugins/jira/tasks/issue_repo_commit_convertor.go b/plugins/jira/tasks/issue_repo_commit_convertor.go
index c80d76ad..b6470107 100644
--- a/plugins/jira/tasks/issue_repo_commit_convertor.go
+++ b/plugins/jira/tasks/issue_repo_commit_convertor.go
@@ -18,9 +18,12 @@ limitations under the License.
 package tasks
 
 import (
-	"github.com/apache/incubator-devlake/plugins/core/dal"
+	"fmt"
 	"reflect"
 	"regexp"
+	"runtime/debug"
+
+	"github.com/apache/incubator-devlake/plugins/core/dal"
 
 	"github.com/apache/incubator-devlake/models/domainlayer/crossdomain"
 	"github.com/apache/incubator-devlake/models/domainlayer/didgen"
@@ -47,8 +50,12 @@ func ConvertIssueRepoCommits(taskCtx core.SubTaskContext) error {
 	logger := taskCtx.GetLogger()
 	logger.Info("convert issue repo commits")
 	var commitRepoUrlRegex *regexp.Regexp
+	var err error
 	commitRepoUrlPattern := `(.*)\-\/commit`
-	commitRepoUrlRegex = regexp.MustCompile(commitRepoUrlPattern)
+	commitRepoUrlRegex, err = regexp.Compile(commitRepoUrlPattern)
+	if err != nil {
+		return fmt.Errorf("regexp Compile commitRepoUrlPattern failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+	}
 
 	clause := []dal.Clause{
 		dal.From("_tool_jira_issue_commits jic"),
diff --git a/plugins/jira/tasks/remotelink_extractor.go b/plugins/jira/tasks/remotelink_extractor.go
index d3027bd0..4b5c1206 100644
--- a/plugins/jira/tasks/remotelink_extractor.go
+++ b/plugins/jira/tasks/remotelink_extractor.go
@@ -19,7 +19,9 @@ package tasks
 
 import (
 	"encoding/json"
+	"fmt"
 	"regexp"
+	"runtime/debug"
 
 	"github.com/apache/incubator-devlake/plugins/core"
 	"github.com/apache/incubator-devlake/plugins/core/dal"
@@ -44,8 +46,12 @@ func ExtractRemotelinks(taskCtx core.SubTaskContext) error {
 	db := taskCtx.GetDal()
 	logger.Info("extract remote links")
 	var commitShaRegex *regexp.Regexp
+	var err error
 	if pattern := data.Options.TransformationRules.RemotelinkCommitShaPattern; pattern != "" {
-		commitShaRegex = regexp.MustCompile(pattern)
+		commitShaRegex, err = regexp.Compile(pattern)
+		if err != nil {
+			return fmt.Errorf("regexp Compile pattern failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 
 	// select all remotelinks belongs to the board, cursor is important for low memory footprint
diff --git a/plugins/refdiff/tasks/refs_pr_cherry_pick_calculator.go b/plugins/refdiff/tasks/refs_pr_cherry_pick_calculator.go
index d4e800db..4659828b 100644
--- a/plugins/refdiff/tasks/refs_pr_cherry_pick_calculator.go
+++ b/plugins/refdiff/tasks/refs_pr_cherry_pick_calculator.go
@@ -18,7 +18,9 @@ limitations under the License.
 package tasks
 
 import (
+	"fmt"
 	"regexp"
+	"runtime/debug"
 	"strconv"
 	"strings"
 	"time"
@@ -44,10 +46,13 @@ func CalculatePrCherryPick(taskCtx core.SubTaskContext) error {
 	ctx := taskCtx.GetContext()
 	db := taskCtx.GetDal()
 	var prTitleRegex *regexp.Regexp
-
+	var err error
 	prTitlePattern := taskCtx.GetConfig("GITHUB_PR_TITLE_PATTERN")
 	if len(prTitlePattern) > 0 {
-		prTitleRegex = regexp.MustCompile(prTitlePattern)
+		prTitleRegex, err = regexp.Compile(prTitlePattern)
+		if err != nil {
+			return fmt.Errorf("regexp Compile prTitlePattern failed:[%s] stack:[%s]", err.Error(), debug.Stack())
+		}
 	}
 
 	cursor, err := db.Cursor(