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

commit 1bf142fdcf43b57318ab90dbe99636ec9c6100e3
Author: abeizn <[email protected]>
AuthorDate: Mon Sep 19 11:39:45 2022 +0800

    feat: add deployTagPattern for jenkins
---
 plugins/jenkins/jenkins.go               |  5 ++++-
 plugins/jenkins/models/connection.go     |  4 ++++
 plugins/jenkins/tasks/stage_convertor.go | 22 +++++++++++++++++++---
 plugins/jenkins/tasks/task_data.go       | 12 ++++++++----
 4 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/plugins/jenkins/jenkins.go b/plugins/jenkins/jenkins.go
index a693fa5c..f5c1c12e 100644
--- a/plugins/jenkins/jenkins.go
+++ b/plugins/jenkins/jenkins.go
@@ -28,9 +28,12 @@ var PluginEntry impl.Jenkins
 func main() {
        jenkinsCmd := &cobra.Command{Use: "jenkins"}
        connectionId := jenkinsCmd.Flags().Uint64P("connection", "c", 1, 
"jenkins connection id")
+       deployTagPattern := jenkinsCmd.Flags().String("deployTagPattern", 
"(?i)deploy", "deploy tag name")
+
        jenkinsCmd.Run = func(cmd *cobra.Command, args []string) {
                runner.DirectRun(cmd, args, PluginEntry, map[string]interface{}{
-                       "connectionId": *connectionId,
+                       "connectionId":     *connectionId,
+                       "deployTagPattern": *deployTagPattern,
                })
        }
        runner.RunCmd(jenkinsCmd)
diff --git a/plugins/jenkins/models/connection.go 
b/plugins/jenkins/models/connection.go
index aa030327..3f0d42c6 100644
--- a/plugins/jenkins/models/connection.go
+++ b/plugins/jenkins/models/connection.go
@@ -38,6 +38,10 @@ type TestConnectionRequest struct {
        Proxy    string `json:"proxy"`
 }
 
+type TransformationRules struct {
+       DeployTagPattern string `mapstructure:"deployTagPattern" 
json:"deployTagPattern"`
+}
+
 func (JenkinsConnection) TableName() string {
        return "_tool_jenkins_connections"
 }
diff --git a/plugins/jenkins/tasks/stage_convertor.go 
b/plugins/jenkins/tasks/stage_convertor.go
index 978ccbc0..d0159068 100644
--- a/plugins/jenkins/tasks/stage_convertor.go
+++ b/plugins/jenkins/tasks/stage_convertor.go
@@ -18,11 +18,13 @@ limitations under the License.
 package tasks
 
 import (
+       "reflect"
+       "regexp"
+       "time"
+
        "github.com/apache/incubator-devlake/errors"
        "github.com/apache/incubator-devlake/models/domainlayer/didgen"
        "github.com/apache/incubator-devlake/plugins/jenkins/models"
-       "reflect"
-       "time"
 
        "github.com/apache/incubator-devlake/models/common"
        "github.com/apache/incubator-devlake/models/domainlayer"
@@ -59,9 +61,18 @@ var ConvertStagesMeta = core.SubTaskMeta{
        DomainTypes:      []string{core.DOMAIN_TYPE_CICD},
 }
 
-func ConvertStages(taskCtx core.SubTaskContext) errors.Error {
+func ConvertStages(taskCtx core.SubTaskContext) (err errors.Error) {
        db := taskCtx.GetDal()
        data := taskCtx.GetData().(*JenkinsTaskData)
+       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")
+               }
+       }
+
        clauses := []dal.Clause{
                dal.Select(`tjb.connection_id, tjs.build_name, tjs.name, 
tjs._raw_data_remark, 
                        tjs._raw_data_id, tjs._raw_data_table, 
tjs._raw_data_params,
@@ -124,6 +135,11 @@ func ConvertStages(taskCtx core.SubTaskContext) 
errors.Error {
                                StartedDate:  time.Unix(durationSec, 0),
                                FinishedDate: jenkinsTaskFinishedDate,
                        }
+                       if deployTagRegexp != nil {
+                               if deployFlag := 
deployTagRegexp.FindString(body.Name); deployFlag != "" {
+                                       jenkinsTask.Type = devops.DEPLOYMENT
+                               }
+                       }
                        jenkinsTask.RawDataOrigin = body.RawDataOrigin
 
                        results = append(results, jenkinsTask)
diff --git a/plugins/jenkins/tasks/task_data.go 
b/plugins/jenkins/tasks/task_data.go
index 072c831a..9014ce0f 100644
--- a/plugins/jenkins/tasks/task_data.go
+++ b/plugins/jenkins/tasks/task_data.go
@@ -18,9 +18,9 @@ limitations under the License.
 package tasks
 
 import (
-       "github.com/apache/incubator-devlake/errors"
        "time"
 
+       "github.com/apache/incubator-devlake/errors"
        "github.com/apache/incubator-devlake/plugins/helper"
        "github.com/apache/incubator-devlake/plugins/jenkins/models"
 )
@@ -30,9 +30,10 @@ type JenkinsApiParams struct {
 }
 
 type JenkinsOptions struct {
-       ConnectionId uint64 `json:"connectionId"`
-       Since        string
-       Tasks        []string `json:"tasks,omitempty"`
+       ConnectionId               uint64 `json:"connectionId"`
+       Since                      string
+       Tasks                      []string `json:"tasks,omitempty"`
+       models.TransformationRules `mapstructure:"transformationRules" 
json:"transformationRules"`
 }
 
 type JenkinsTaskData struct {
@@ -48,6 +49,9 @@ func DecodeAndValidateTaskOptions(options 
map[string]interface{}) (*JenkinsOptio
        if err != nil {
                return nil, errors.BadInput.Wrap(err, "could not decode request 
parameters")
        }
+       if op.DeployTagPattern == "" {
+               op.DeployTagPattern = "(?i)deploy"
+       }
        // find the needed Jenkins now
        if op.ConnectionId == 0 {
                return nil, errors.BadInput.New("connectionId is invalid")

Reply via email to