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")
