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

warren 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 89a0343e feat: add deployTagPattern for gitlab
89a0343e is described below

commit 89a0343e25b6cb60c1ca32e6893a7408144ca337
Author: abeizn <[email protected]>
AuthorDate: Mon Sep 19 10:30:07 2022 +0800

    feat: add deployTagPattern for gitlab
---
 plugins/gitlab/gitlab.go              | 39 +++++++++++++++++++++++++++--------
 plugins/gitlab/models/connection.go   |  1 +
 plugins/gitlab/tasks/job_convertor.go | 22 +++++++++++++++++---
 plugins/gitlab/tasks/task_data.go     |  3 +++
 4 files changed, 53 insertions(+), 12 deletions(-)

diff --git a/plugins/gitlab/gitlab.go b/plugins/gitlab/gitlab.go
index 7f85f7c7..ece1faa6 100644
--- a/plugins/gitlab/gitlab.go
+++ b/plugins/gitlab/gitlab.go
@@ -28,18 +28,39 @@ var PluginEntry impl.Gitlab //nolint
 
 // standalone mode for debugging
 func main() {
-       gitlabCmd := &cobra.Command{Use: "gitlab"}
-       projectId := gitlabCmd.Flags().IntP("project-id", "p", 0, "gitlab 
project id")
-       connectionId := gitlabCmd.Flags().Uint64P("connection-id", "c", 0, 
"gitlab connection id")
+       cmd := &cobra.Command{Use: "gitlab"}
+       projectId := cmd.Flags().IntP("project-id", "p", 0, "gitlab project id")
+       connectionId := cmd.Flags().Uint64P("connection-id", "c", 0, "gitlab 
connection id")
+       _ = cmd.MarkFlagRequired("project-id")
+       _ = cmd.MarkFlagRequired("connection-id")
 
-       _ = gitlabCmd.MarkFlagRequired("project-id")
-       _ = gitlabCmd.MarkFlagRequired("connection-id")
-       gitlabCmd.Run = func(cmd *cobra.Command, args []string) {
+       prType := cmd.Flags().String("prType", "type/(.*)$", "pr type")
+       prComponent := cmd.Flags().String("prComponent", "component/(.*)$", "pr 
component")
+       prBodyClosePattern := cmd.Flags().String("prBodyClosePattern", 
"(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\\s]*.*(((and
 )?(#|https:\\/\\/github.com\\/%s\\/%s\\/issues\\/)\\d+[ ]*)+)", "pr body close 
pattern")
+       issueSeverity := cmd.Flags().String("issueSeverity", "severity/(.*)$", 
"issue severity")
+       issuePriority := cmd.Flags().String("issuePriority", 
"^(highest|high|medium|low)$", "issue priority")
+       issueComponent := cmd.Flags().String("issueComponent", 
"component/(.*)$", "issue component")
+       issueTypeBug := cmd.Flags().String("issueTypeBug", 
"^(bug|failure|error)$", "issue type bug")
+       issueTypeIncident := cmd.Flags().String("issueTypeIncident", "", "issue 
type incident")
+       issueTypeRequirement := cmd.Flags().String("issueTypeRequirement", 
"^(feat|feature|proposal|requirement)$", "issue type requirement")
+       deployTagPattern := cmd.Flags().String("deployTagPattern", 
"(?i)deploy", "deploy tag name")
+
+       cmd.Run = func(cmd *cobra.Command, args []string) {
                runner.DirectRun(cmd, args, PluginEntry, map[string]interface{}{
-                       "projectId":    *projectId,
-                       "connectionId": *connectionId,
+                       "projectId":            *projectId,
+                       "connectionId":         *connectionId,
+                       "prType":               *prType,
+                       "prComponent":          *prComponent,
+                       "prBodyClosePattern":   *prBodyClosePattern,
+                       "issueSeverity":        *issueSeverity,
+                       "issuePriority":        *issuePriority,
+                       "issueComponent":       *issueComponent,
+                       "issueTypeBug":         *issueTypeBug,
+                       "issueTypeIncident":    *issueTypeIncident,
+                       "issueTypeRequirement": *issueTypeRequirement,
+                       "deployTagPattern":     *deployTagPattern,
                })
        }
 
-       runner.RunCmd(gitlabCmd)
+       runner.RunCmd(cmd)
 }
diff --git a/plugins/gitlab/models/connection.go 
b/plugins/gitlab/models/connection.go
index 5f79e16f..8fbac80f 100644
--- a/plugins/gitlab/models/connection.go
+++ b/plugins/gitlab/models/connection.go
@@ -54,6 +54,7 @@ type TransformationRules struct {
        IssueTypeBug         string `mapstructure:"issueTypeBug" 
json:"issueTypeBug"`
        IssueTypeIncident    string `mapstructure:"issueTypeIncident" 
json:"issueTypeIncident"`
        IssueTypeRequirement string `mapstructure:"issueTypeRequirement" 
json:"issueTypeRequirement"`
+       DeployTagPattern     string `mapstructure:"deployTagPattern" 
json:"deployTagPattern"`
 }
 
 func (GitlabConnection) TableName() string {
diff --git a/plugins/gitlab/tasks/job_convertor.go 
b/plugins/gitlab/tasks/job_convertor.go
index 1ecc1576..10dd2124 100644
--- a/plugins/gitlab/tasks/job_convertor.go
+++ b/plugins/gitlab/tasks/job_convertor.go
@@ -18,6 +18,9 @@ limitations under the License.
 package tasks
 
 import (
+       "reflect"
+       "regexp"
+
        "github.com/apache/incubator-devlake/errors"
        "github.com/apache/incubator-devlake/models/domainlayer"
        "github.com/apache/incubator-devlake/models/domainlayer/devops"
@@ -26,7 +29,6 @@ import (
        "github.com/apache/incubator-devlake/plugins/core/dal"
        gitlabModels "github.com/apache/incubator-devlake/plugins/gitlab/models"
        "github.com/apache/incubator-devlake/plugins/helper"
-       "reflect"
 )
 
 var ConvertJobMeta = core.SubTaskMeta{
@@ -37,10 +39,19 @@ var ConvertJobMeta = core.SubTaskMeta{
        DomainTypes:      []string{core.DOMAIN_TYPE_CROSS},
 }
 
-func ConvertJobs(taskCtx core.SubTaskContext) errors.Error {
+func ConvertJobs(taskCtx core.SubTaskContext) (err errors.Error) {
        db := taskCtx.GetDal()
        data := taskCtx.GetData().(*GitlabTaskData)
 
+       var deployTagRegexp *regexp.Regexp
+       deployTagPattern := data.Options.DeployTagPattern
+       if len(deployTagPattern) > 0 {
+               deployTagRegexp, err = 
errors.Convert01(regexp.Compile(deployTagPattern))
+               if err != nil {
+                       return errors.Default.Wrap(err, "regexp compile 
deployTagPattern failed")
+               }
+       }
+
        cursor, err := db.Cursor(dal.From(gitlabModels.GitlabJob{}))
        if err != nil {
                return err
@@ -58,7 +69,7 @@ func ConvertJobs(taskCtx core.SubTaskContext) errors.Error {
                                ConnectionId: data.Options.ConnectionId,
                                ProjectId:    data.Options.ProjectId,
                        },
-                       Table: RAW_USER_TABLE,
+                       Table: RAW_JOB_TABLE,
                },
                Convert: func(inputRow interface{}) ([]interface{}, 
errors.Error) {
                        gitlabJob := inputRow.(*gitlabModels.GitlabJob)
@@ -91,6 +102,11 @@ func ConvertJobs(taskCtx core.SubTaskContext) errors.Error {
                                StartedDate:  *startedAt,
                                FinishedDate: gitlabJob.FinishedAt,
                        }
+                       if deployTagRegexp != nil {
+                               if deployFlag := 
deployTagRegexp.FindString(gitlabJob.Name); deployFlag != "" {
+                                       domainJob.Type = devops.DEPLOYMENT
+                               }
+                       }
 
                        return []interface{}{
                                domainJob,
diff --git a/plugins/gitlab/tasks/task_data.go 
b/plugins/gitlab/tasks/task_data.go
index 2e66fc94..0095507a 100644
--- a/plugins/gitlab/tasks/task_data.go
+++ b/plugins/gitlab/tasks/task_data.go
@@ -76,6 +76,9 @@ func DecodeAndValidateTaskOptions(options 
map[string]interface{}) (*GitlabOption
        if op.IssueTypeRequirement == "" {
                op.IssueTypeRequirement = 
"^(feat|feature|proposal|requirement)$"
        }
+       if op.DeployTagPattern == "" {
+               op.DeployTagPattern = "(?i)deploy"
+       }
 
        // find the needed GitHub now
        if op.ConnectionId == 0 {

Reply via email to