This is an automated email from the ASF dual-hosted git repository.
klesh 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 e71353806 fix(plugins): modify dora and refdiff (#4026)
e71353806 is described below
commit e71353806bbf210d1158c81dc1e9c888812bf229
Author: Warren Chen <[email protected]>
AuthorDate: Mon Dec 26 18:00:37 2022 +0800
fix(plugins): modify dora and refdiff (#4026)
---
plugins/dora/e2e/env_enricher_test.go | 62 --------
.../dora/e2e/snapshot_tables/enrich_cicd_tasks.csv | 19 ---
plugins/dora/impl/impl.go | 2 +
.../dora/tasks/change_lead_time_calculator_old.go | 164 +++++++++++++++++++++
plugins/dora/tasks/cicd_task_env_enricher.go | 54 +------
.../dora/tasks/incident_deploy_connector_old.go | 109 ++++++++++++++
plugins/dora/tasks/task_data.go | 2 +
plugins/github/api/blueprint.go | 52 ++++---
plugins/github/api/blueprint_test.go | 11 +-
plugins/gitlab/api/blueprint.go | 55 +++----
plugins/gitlab/api/blueprint_test.go | 11 +-
plugins/jenkins/api/blueprint_v100.go | 12 +-
plugins/jenkins/api/blueprint_v100_test.go | 7 +-
services/blueprint_makeplan_v100.go | 2 +-
14 files changed, 349 insertions(+), 213 deletions(-)
diff --git a/plugins/dora/e2e/env_enricher_test.go
b/plugins/dora/e2e/env_enricher_test.go
deleted file mode 100644
index c3a077b90..000000000
--- a/plugins/dora/e2e/env_enricher_test.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package e2e
-
-import (
- "github.com/apache/incubator-devlake/models/domainlayer/crossdomain"
- "testing"
-
- "github.com/apache/incubator-devlake/helpers/e2ehelper"
- "github.com/apache/incubator-devlake/models/domainlayer/devops"
- "github.com/apache/incubator-devlake/plugins/dora/impl"
- "github.com/apache/incubator-devlake/plugins/dora/tasks"
-)
-
-func TestEnrichEnvDataFlow(t *testing.T) {
- var plugin impl.Dora
- dataflowTester := e2ehelper.NewDataFlowTester(t, "dora", plugin)
-
- taskData := &tasks.DoraTaskData{
- Options: &tasks.DoraOptions{
- ProjectName: "project1",
- TransformationRules: tasks.TransformationRules{
- ProductionPattern: "(?i)deploy",
- StagingPattern: "(?i)stag",
- TestingPattern: "(?i)test",
- },
- },
- }
-
- // import raw data table
- dataflowTester.ImportCsvIntoTabler("./raw_tables/project_mapping.csv",
&crossdomain.ProjectMapping{})
-
dataflowTester.ImportCsvIntoTabler("./raw_tables/cicd_tasks_for_enrich_env.csv",
&devops.CICDTask{})
-
- // verify enrich with repoId
- dataflowTester.Subtask(tasks.EnrichTaskEnvMeta, taskData)
- dataflowTester.VerifyTable(
- &devops.CICDTask{},
- "./snapshot_tables/enrich_cicd_tasks.csv",
- []string{
- "id",
- "name",
- "environment",
- "type",
- "cicd_scope_id",
- },
- )
-}
diff --git a/plugins/dora/e2e/snapshot_tables/enrich_cicd_tasks.csv
b/plugins/dora/e2e/snapshot_tables/enrich_cicd_tasks.csv
deleted file mode 100644
index ee52b8d1d..000000000
--- a/plugins/dora/e2e/snapshot_tables/enrich_cicd_tasks.csv
+++ /dev/null
@@ -1,19 +0,0 @@
-id,name,environment,type,cicd_scope_id
-task10,deployxIG,PRODUCTION,DEPLOYMENT,cicd1
-task11,deploya,PRODUCTION,DEPLOYMENT,cicd1
-task12,deployc,PRODUCTION,DEPLOYMENT,cicd2
-task13,deploy,PRODUCTION,DEPLOYMENT,cicd1
-task14,deployp0;,PRODUCTION,DEPLOYMENT,cicd1
-task15,deployY{,PRODUCTION,DEPLOYMENT,cicd2
-task16,deploy8',PRODUCTION,DEPLOYMENT,cicd1
-task17,deployKd%,PRODUCTION,DEPLOYMENT,cicd1
-task19,deploy1,PRODUCTION,DEPLOYMENT,cicd1
-task21,deploy^^.,PRODUCTION,DEPLOYMENT,cicd1
-task22,deploy,PRODUCTION,DEPLOYMENT,cicd1
-task23,deploy,PRODUCTION,DEPLOYMENT,cicd1
-task24,deploym,PRODUCTION,DEPLOYMENT,cicd1
-task25,deploy$p<,,,cicd3
-task26,deployb>@,PRODUCTION,DEPLOYMENT,cicd2
-task27,deployKfn,PRODUCTION,DEPLOYMENT,cicd2
-task28,deployl?,,DEPLOYMENT,cicd3
-task29,deployUb,PRODUCTION,DEPLOYMENT,cicd2
diff --git a/plugins/dora/impl/impl.go b/plugins/dora/impl/impl.go
index 82fdf870e..cd8064362 100644
--- a/plugins/dora/impl/impl.go
+++ b/plugins/dora/impl/impl.go
@@ -85,6 +85,8 @@ func (plugin Dora) SubTaskMetas() []core.SubTaskMeta {
tasks.EnrichTaskEnvMeta,
tasks.CalculateChangeLeadTimeMeta,
tasks.ConnectIncidentToDeploymentMeta,
+ tasks.CalculateChangeLeadTimeOldMeta,
+ tasks.ConnectIncidentToDeploymentOldMeta,
}
}
diff --git a/plugins/dora/tasks/change_lead_time_calculator_old.go
b/plugins/dora/tasks/change_lead_time_calculator_old.go
new file mode 100644
index 000000000..1fa9795af
--- /dev/null
+++ b/plugins/dora/tasks/change_lead_time_calculator_old.go
@@ -0,0 +1,164 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tasks
+
+import (
+ "github.com/apache/incubator-devlake/models/domainlayer/crossdomain"
+ "github.com/apache/incubator-devlake/models/domainlayer/devops"
+ "reflect"
+ "time"
+
+ "github.com/apache/incubator-devlake/errors"
+ "github.com/apache/incubator-devlake/models/domainlayer/code"
+ "github.com/apache/incubator-devlake/plugins/core"
+ "github.com/apache/incubator-devlake/plugins/core/dal"
+ "github.com/apache/incubator-devlake/plugins/helper"
+)
+
+// CalculateChangeLeadTimeOldMeta will be removed in v0.17
+// DEPRECATED
+func CalculateChangeLeadTimeOld(taskCtx core.SubTaskContext) errors.Error {
+ db := taskCtx.GetDal()
+ log := taskCtx.GetLogger()
+ clauses := []dal.Clause{
+ dal.From(&code.PullRequest{}),
+ dal.Where("merged_date IS NOT NULL"),
+ }
+ cursor, err := db.Cursor(clauses...)
+ if err != nil {
+ return err
+ }
+ defer cursor.Close()
+
+ enricher, err := helper.NewDataConverter(helper.DataConverterArgs{
+ RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
+ Ctx: taskCtx,
+ Params: DoraApiParams{
+ // TODO
+ },
+ Table: "pull_requests",
+ },
+ BatchSize: 100,
+ InputRowType: reflect.TypeOf(code.PullRequest{}),
+ Input: cursor,
+ Convert: func(inputRow interface{}) ([]interface{},
errors.Error) {
+ pr := inputRow.(*code.PullRequest)
+ firstCommit, err := getFirstCommit(pr.Id, db)
+ if err != nil {
+ return nil, err
+ }
+ projectPrMetric := &crossdomain.ProjectPrMetric{}
+ projectPrMetric.Id = pr.Id
+ projectPrMetric.ProjectName = "DEFAULT_PROJECT_NAME"
+ if err != nil {
+ return nil, err
+ }
+ if firstCommit != nil {
+ codingTime :=
int64(pr.CreatedDate.Sub(firstCommit.AuthoredDate).Seconds())
+ if codingTime/60 == 0 && codingTime%60 > 0 {
+ codingTime = 1
+ } else {
+ codingTime = codingTime / 60
+ }
+ projectPrMetric.PrCodingTime =
processNegativeValue(codingTime)
+ projectPrMetric.FirstCommitSha = firstCommit.Sha
+ }
+ firstReview, err := getFirstReview(pr.Id, pr.AuthorId,
db)
+ if err != nil {
+ return nil, err
+ }
+ if firstReview != nil {
+ projectPrMetric.PrPickupTime =
processNegativeValue(int64(firstReview.CreatedDate.Sub(pr.CreatedDate).Minutes()))
+ projectPrMetric.PrReviewTime =
processNegativeValue(int64(pr.MergedDate.Sub(firstReview.CreatedDate).Minutes()))
+ projectPrMetric.FirstReviewId =
firstReview.ReviewId
+ }
+ deployment, err := getDeploymentOld(devops.PRODUCTION,
*pr.MergedDate, db)
+ if err != nil {
+ return nil, err
+ }
+ if deployment != nil && deployment.FinishedDate != nil {
+ timespan :=
deployment.FinishedDate.Sub(*pr.MergedDate)
+ projectPrMetric.PrDeployTime =
processNegativeValue(int64(timespan.Minutes()))
+ projectPrMetric.DeploymentId = deployment.Id
+ } else {
+ log.Debug("deploy time of pr %v is nil\n",
pr.PullRequestKey)
+ }
+ projectPrMetric.PrCycleTime = nil
+ var result int64
+ if projectPrMetric.PrCodingTime != nil {
+ result += *projectPrMetric.PrCodingTime
+ }
+ if projectPrMetric.PrPickupTime != nil {
+ result += *projectPrMetric.PrPickupTime
+ }
+ if projectPrMetric.PrReviewTime != nil {
+ result += *projectPrMetric.PrReviewTime
+ }
+ if projectPrMetric.PrDeployTime != nil {
+ result += *projectPrMetric.PrDeployTime
+ }
+ if result > 0 {
+ projectPrMetric.PrCycleTime = &result
+ }
+ return []interface{}{projectPrMetric}, nil
+ },
+ })
+ if err != nil {
+ return err
+ }
+
+ return enricher.Execute()
+}
+
+func getDeploymentOld(environment string, mergeDate time.Time, db dal.Dal)
(*devops.CICDTask, errors.Error) {
+ // ignore environment at this point because detecting it by name is
obviously not engouh
+ // take
https://github.com/apache/incubator-devlake/actions/workflows/build.yml for
example
+ // one can not distingush testing/production by looking at the job name
solely.
+ cicdTask := &devops.CICDTask{}
+ cicdTaskClauses := []dal.Clause{
+ dal.From(&devops.CICDTask{}),
+ dal.Where(`
+ type = ?
+ AND cicd_tasks.result = ?
+ AND cicd_tasks.started_date > ?`,
+ "DEPLOYMENT",
+ "SUCCESS",
+ mergeDate,
+ ),
+ dal.Orderby("cicd_tasks.started_date ASC"),
+ dal.Limit(1),
+ }
+ err := db.First(cicdTask, cicdTaskClauses...)
+ if db.IsErrorNotFound(err) {
+ return nil, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ return cicdTask, nil
+}
+
+// CalculateChangeLeadTimeOldMeta will be removed in v0.17
+// DEPRECATED
+var CalculateChangeLeadTimeOldMeta = core.SubTaskMeta{
+ Name: "calculateChangeLeadTimeOld",
+ EntryPoint: CalculateChangeLeadTimeOld,
+ EnabledByDefault: false,
+ Description: "Calculate change lead time",
+ DomainTypes: []string{core.DOMAIN_TYPE_CICD,
core.DOMAIN_TYPE_CODE},
+}
diff --git a/plugins/dora/tasks/cicd_task_env_enricher.go
b/plugins/dora/tasks/cicd_task_env_enricher.go
index 1fcd5add8..fbb53cdbe 100644
--- a/plugins/dora/tasks/cicd_task_env_enricher.go
+++ b/plugins/dora/tasks/cicd_task_env_enricher.go
@@ -18,16 +18,12 @@ limitations under the License.
package tasks
import (
- "reflect"
- "regexp"
-
"github.com/apache/incubator-devlake/errors"
- "github.com/apache/incubator-devlake/models/domainlayer/devops"
"github.com/apache/incubator-devlake/plugins/core"
- "github.com/apache/incubator-devlake/plugins/core/dal"
- "github.com/apache/incubator-devlake/plugins/helper"
)
+// EnrichTaskEnvMeta will be removed in v0.17
+// DEPRECATED
var EnrichTaskEnvMeta = core.SubTaskMeta{
Name: "EnrichTaskEnv",
EntryPoint: EnrichTasksEnv,
@@ -37,49 +33,5 @@ var EnrichTaskEnvMeta = core.SubTaskMeta{
}
func EnrichTasksEnv(taskCtx core.SubTaskContext) (err errors.Error) {
- db := taskCtx.GetDal()
- data := taskCtx.GetData().(*DoraTaskData)
- projectName := data.Options.ProjectName
-
- productionNamePattern := data.Options.ProductionPattern
- productionNameRegexp, err :=
errors.Convert01(regexp.Compile(productionNamePattern))
- if err != nil {
- return err
- }
-
- cursor, err := db.Cursor(
- dal.From(`cicd_tasks ct`),
- dal.Join("left join project_mapping pm on pm.row_id =
ct.cicd_scope_id"),
- dal.Where(`pm.project_name = ? and pm.table = ?`, projectName,
"cicd_scopes"),
- )
-
- if err != nil {
- return err
- }
-
- defer cursor.Close()
- converter, err := helper.NewDataConverter(helper.DataConverterArgs{
- RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
- Ctx: taskCtx,
- Params: DoraApiParams{
- ProjectName: projectName,
- },
- Table: "cicd_tasks",
- },
- InputRowType: reflect.TypeOf(devops.CICDTask{}),
- Input: cursor,
- Convert: func(inputRow interface{}) ([]interface{},
errors.Error) {
- cicdTask := inputRow.(*devops.CICDTask)
- if productionNamePattern == "" ||
productionNameRegexp.FindString(cicdTask.Name) != "" {
- cicdTask.Environment = devops.PRODUCTION
- return []interface{}{cicdTask}, nil
- }
- return nil, nil
- },
- })
- if err != nil {
- return err
- }
-
- return converter.Execute()
+ return nil
}
diff --git a/plugins/dora/tasks/incident_deploy_connector_old.go
b/plugins/dora/tasks/incident_deploy_connector_old.go
new file mode 100644
index 000000000..18a0f2e93
--- /dev/null
+++ b/plugins/dora/tasks/incident_deploy_connector_old.go
@@ -0,0 +1,109 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tasks
+
+import (
+ "reflect"
+
+ "github.com/apache/incubator-devlake/models/domainlayer"
+ "github.com/apache/incubator-devlake/models/domainlayer/crossdomain"
+
+ "github.com/apache/incubator-devlake/errors"
+ "github.com/apache/incubator-devlake/models/domainlayer/devops"
+ "github.com/apache/incubator-devlake/models/domainlayer/ticket"
+ "github.com/apache/incubator-devlake/plugins/core"
+ "github.com/apache/incubator-devlake/plugins/core/dal"
+ "github.com/apache/incubator-devlake/plugins/helper"
+)
+
+// ConnectIncidentToDeploymentOldMeta will be removed in v0.17
+// DEPRECATED
+var ConnectIncidentToDeploymentOldMeta = core.SubTaskMeta{
+ Name: "connectIncidentToDeploymentOld",
+ EntryPoint: ConnectIncidentToDeploymentOld,
+ EnabledByDefault: false,
+ Description: "Connect incident issue to deployment",
+ DomainTypes: []string{core.DOMAIN_TYPE_CICD},
+}
+
+// ConnectIncidentToDeploymentOld will be removed in v0.17
+// DEPRECATED
+func ConnectIncidentToDeploymentOld(taskCtx core.SubTaskContext) errors.Error {
+ db := taskCtx.GetDal()
+ issue := &ticket.Issue{}
+ // select all issues belongs to the board
+ clauses := []dal.Clause{
+ dal.From(issue),
+ dal.Where(
+ "issues.type = ?", "INCIDENT",
+ ),
+ }
+ cursor, err := db.Cursor(clauses...)
+ if err != nil {
+ return err
+ }
+ defer cursor.Close()
+
+ enricher, err := helper.NewDataConverter(helper.DataConverterArgs{
+ RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
+ Ctx: taskCtx,
+ Params: DoraApiParams{
+ // TODO
+ },
+ Table: "issues",
+ },
+ InputRowType: reflect.TypeOf(ticket.Issue{}),
+ Input: cursor,
+ Convert: func(inputRow interface{}) ([]interface{},
errors.Error) {
+ issueToBeUpdate := inputRow.(*ticket.Issue)
+ cicdTask := &devops.CICDTask{}
+ cicdTakClauses := []dal.Clause{
+ dal.From(cicdTask),
+ dal.Join("left join cicd_pipeline_commits on
cicd_tasks.pipeline_id = cicd_pipeline_commits.pipeline_id"),
+ dal.Where(
+ `cicd_tasks.finished_date < ?
+ and
cicd_tasks.result = ? and cicd_tasks.environment = ?`,
+ issueToBeUpdate.CreatedDate, "SUCCESS",
devops.PRODUCTION,
+ ),
+ dal.Orderby("cicd_tasks.finished_date DESC"),
+ }
+ err = db.First(cicdTask, cicdTakClauses...)
+ if err != nil {
+ if db.IsErrorNotFound(err) {
+ return nil, nil
+ } else {
+ return nil, err
+ }
+ }
+ projectIssueMetric := &crossdomain.ProjectIssueMetric{
+ DomainEntity: domainlayer.DomainEntity{
+ Id: issue.Id,
+ },
+ ProjectName: "DEFAULT_PROJECT_NAME",
+ }
+ projectIssueMetric.DeploymentId = cicdTask.Id
+
+ return []interface{}{projectIssueMetric}, nil
+ },
+ })
+ if err != nil {
+ return err
+ }
+
+ return enricher.Execute()
+}
diff --git a/plugins/dora/tasks/task_data.go b/plugins/dora/tasks/task_data.go
index 16ce528af..35e285159 100644
--- a/plugins/dora/tasks/task_data.go
+++ b/plugins/dora/tasks/task_data.go
@@ -36,6 +36,8 @@ type DoraOptions struct {
Tasks []string `json:"tasks,omitempty"`
Since string
RepoId string `json:"repoId"`
+ CicdScopeId string `json:"cicdScopeId"`
+ BoardId string `json:"boardId"`
Prefix string `json:"prefix"`
ProjectName string `json:"projectName"`
TransformationRules `mapstructure:"transformationRules"
json:"transformationRules"`
diff --git a/plugins/github/api/blueprint.go b/plugins/github/api/blueprint.go
index 9f4c54f21..3afd41514 100644
--- a/plugins/github/api/blueprint.go
+++ b/plugins/github/api/blueprint.go
@@ -77,6 +77,20 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta,
scopeV100s []*core.Bluepr
return nil, err
}
}
+ // construct task options for github
+ options := make(map[string]interface{})
+ err = errors.Convert(json.Unmarshal(scopeElem.Options,
&options))
+ if err != nil {
+ return nil, err
+ }
+ options["connectionId"] = connection.ID
+ options["transformationRules"] = transformationRules
+ // make sure task options is valid
+ op, err := tasks.DecodeAndValidateTaskOptions(options)
+ if err != nil {
+ return nil, err
+ }
+
// refdiff
if refdiffRules, ok := transformationRules["refdiff"]; ok &&
refdiffRules != nil {
// add a new task to next stage
@@ -84,28 +98,21 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta,
scopeV100s []*core.Bluepr
if j == len(plan) {
plan = append(plan, nil)
}
+ repo, err = MemorizedGetApiRepo(repo, op, apiClient)
+ if err != nil {
+ return nil, err
+ }
+ ops := refdiffRules.(map[string]interface{})
+ ops["repoId"] =
didgen.NewDomainIdGenerator(&models.GithubRepo{}).Generate(connection.ID,
repo.GithubId)
plan[j] = core.PipelineStage{
{
Plugin: "refdiff",
- Options:
refdiffRules.(map[string]interface{}),
+ Options: ops,
},
}
// remove it from github transformationRules
delete(transformationRules, "refdiff")
}
- // construct task options for github
- options := make(map[string]interface{})
- err = errors.Convert(json.Unmarshal(scopeElem.Options,
&options))
- if err != nil {
- return nil, err
- }
- options["connectionId"] = connection.ID
- options["transformationRules"] = transformationRules
- // make sure task options is valid
- op, err := tasks.DecodeAndValidateTaskOptions(options)
- if err != nil {
- return nil, err
- }
stage := plan[i]
if stage == nil {
@@ -124,6 +131,9 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta,
scopeV100s []*core.Bluepr
if err != nil {
return nil, err
}
+ // This is just to add a dora subtask, then we can add another
two subtasks at the end of plans
+ // The only purpose is to adapt old blueprints
+ // DEPRECATED, will be removed in v0.17
// dora
if productionPattern, ok :=
transformationRules["productionPattern"]; ok && productionPattern != nil {
j := i + 1
@@ -137,25 +147,13 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta,
scopeV100s []*core.Bluepr
if j == len(plan) {
plan = append(plan, nil)
}
- repo, err = MemorizedGetApiRepo(repo, op, apiClient)
- if err != nil {
- return nil, err
- }
-
plan[j] = core.PipelineStage{
{
Plugin: "dora",
Subtasks: []string{"EnrichTaskEnv"},
- Options: map[string]interface{}{
- "repoId":
didgen.NewDomainIdGenerator(&models.GithubRepo{}).Generate(connection.ID,
repo.GithubId),
- "transformationRules":
map[string]interface{}{
- "productionPattern":
productionPattern,
- },
- },
+ Options: map[string]interface{}{},
},
}
- // remove it from github transformationRules
- delete(transformationRules, "productionPattern")
}
plan[i] = stage
repo = nil
diff --git a/plugins/github/api/blueprint_test.go
b/plugins/github/api/blueprint_test.go
index e83332835..c0ea3f752 100644
--- a/plugins/github/api/blueprint_test.go
+++ b/plugins/github/api/blueprint_test.go
@@ -90,7 +90,8 @@ func TestMakePipelinePlan(t *testing.T) {
"owner": "test",
"repo": "testRepo",
"transformationRules":
map[string]interface{}{
- "prType": "hey,man,wasup",
+ "prType":
"hey,man,wasup",
+ "productionPattern": "xxxx",
},
},
},
@@ -107,6 +108,7 @@ func TestMakePipelinePlan(t *testing.T) {
{
Plugin: "refdiff",
Options: map[string]interface{}{
+ "repoId":
"github:GithubRepo:1:12345",
"tagsLimit": float64(10),
"tagsOrder": "reverse semver",
"tagsPattern": "pattern",
@@ -117,12 +119,7 @@ func TestMakePipelinePlan(t *testing.T) {
{
Plugin: "dora",
Subtasks: []string{"EnrichTaskEnv"},
- Options: map[string]interface{}{
- "repoId": "github:GithubRepo:1:12345",
- "transformationRules":
map[string]interface{}{
- "productionPattern": "xxxx",
- },
- },
+ Options: map[string]interface{}{},
},
},
}
diff --git a/plugins/gitlab/api/blueprint.go b/plugins/gitlab/api/blueprint.go
index 636258202..0af308ee2 100644
--- a/plugins/gitlab/api/blueprint.go
+++ b/plugins/gitlab/api/blueprint.go
@@ -79,22 +79,6 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta, scope
[]*core.BlueprintSc
return nil, err
}
}
- // refdiff
- if refdiffRules, ok := transformationRules["refdiff"]; ok &&
refdiffRules != nil {
- // add a new task to next stage
- j := i + 1
- if j == len(plan) {
- plan = append(plan, nil)
- }
- plan[j] = core.PipelineStage{
- {
- Plugin: "refdiff",
- Options:
refdiffRules.(map[string]interface{}),
- },
- }
- // remove it from github transformationRules
- delete(transformationRules, "refdiff")
- }
// construct task options for github
options := make(map[string]interface{})
err = errors.Convert(json.Unmarshal(scopeElem.Options,
&options))
@@ -116,6 +100,29 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta,
scope []*core.BlueprintSc
return repo, err
}
+ // refdiff
+ if refdiffRules, ok := transformationRules["refdiff"]; ok &&
refdiffRules != nil {
+ // add a new task to next stage
+ j := i + 1
+ if j == len(plan) {
+ plan = append(plan, nil)
+ }
+ repo, err = memorizedGetApiRepo()
+ if err != nil {
+ return nil, err
+ }
+ ops := refdiffRules.(map[string]interface{})
+ ops["repoId"] =
didgen.NewDomainIdGenerator(&models.GitlabProject{}).Generate(connection.ID,
repo.GitlabId)
+ plan[j] = core.PipelineStage{
+ {
+ Plugin: "refdiff",
+ Options: ops,
+ },
+ }
+ // remove it from github transformationRules
+ delete(transformationRules, "refdiff")
+ }
+
// construct subtasks
subtasks, err := helper.MakePipelinePlanSubtasks(subtaskMetas,
scopeElem.Entities)
if err != nil {
@@ -151,6 +158,9 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta,
scope []*core.BlueprintSc
},
})
}
+ // This is just to add a dora subtask, then we can add another
two subtasks at the end of plans
+ // The only purpose is to adapt old blueprints
+ // DEPRECATED, will be removed in v0.17
// dora
if productionPattern, ok :=
transformationRules["productionPattern"]; ok && productionPattern != nil {
j := i + 1
@@ -170,18 +180,13 @@ func makePipelinePlan(subtaskMetas []core.SubTaskMeta,
scope []*core.BlueprintSc
}
plan[j] = core.PipelineStage{
{
- Plugin: "dora",
+ Plugin: "dora",
+ // This is just to add a dora subtask,
then we can add another two subtasks at the end of plans
+ // The only purpose is to adapt old
blueprints
Subtasks: []string{"EnrichTaskEnv"},
- Options: map[string]interface{}{
- "repoId":
didgen.NewDomainIdGenerator(&models.GitlabProject{}).Generate(connection.ID,
repo.GitlabId),
- "transformationRules":
map[string]interface{}{
- "productionPattern":
productionPattern,
- },
- },
+ Options: map[string]interface{}{},
},
}
- // remove it from github transformationRules
- delete(transformationRules, "productionPattern")
}
plan[i] = stage
repo = nil
diff --git a/plugins/gitlab/api/blueprint_test.go
b/plugins/gitlab/api/blueprint_test.go
index 4fbb255fa..2b0bb1fa1 100644
--- a/plugins/gitlab/api/blueprint_test.go
+++ b/plugins/gitlab/api/blueprint_test.go
@@ -95,7 +95,8 @@ func TestProcessScope(t *testing.T) {
"connectionId": uint64(1),
"projectId": float64(12345),
"transformationRules":
map[string]interface{}{
- "prType": "hey,man,wasup",
+ "prType":
"hey,man,wasup",
+ "productionPattern": "xxxx",
},
},
},
@@ -112,6 +113,7 @@ func TestProcessScope(t *testing.T) {
{
Plugin: "refdiff",
Options: map[string]interface{}{
+ "repoId":
"gitlab:GitlabProject:1:12345",
"tagsLimit": float64(10),
"tagsOrder": "reverse semver",
"tagsPattern": "pattern",
@@ -122,12 +124,7 @@ func TestProcessScope(t *testing.T) {
{
Plugin: "dora",
Subtasks: []string{"EnrichTaskEnv"},
- Options: map[string]interface{}{
- "repoId":
"gitlab:GitlabProject:1:12345",
- "transformationRules":
map[string]interface{}{
- "productionPattern": "xxxx",
- },
- },
+ Options: map[string]interface{}{},
},
},
}
diff --git a/plugins/jenkins/api/blueprint_v100.go
b/plugins/jenkins/api/blueprint_v100.go
index e5aa9a57d..417034a62 100644
--- a/plugins/jenkins/api/blueprint_v100.go
+++ b/plugins/jenkins/api/blueprint_v100.go
@@ -130,20 +130,16 @@ func makePipelinePlanV100(subtaskMetas
[]core.SubTaskMeta, scope []*core.Bluepri
if err != nil {
return nil, err
}
-
+ // This is just to add a dora subtask, then we can add another
two subtasks at the end of plans
+ // The only purpose is to adapt old blueprints
+ // DEPRECATED, will be removed in v0.17
// Dora part
if productionPattern != nil {
- doraOption := make(map[string]interface{})
- doraOption["prefix"] = "jenkins"
- doraRules := make(map[string]interface{})
- doraRules["productionPattern"] = productionPattern
- doraOption["transformationRules"] = doraRules
-
stageDora := core.PipelineStage{
{
Plugin: "dora",
Subtasks: []string{"EnrichTaskEnv"},
- Options: doraOption,
+ Options: map[string]interface{}{},
},
}
diff --git a/plugins/jenkins/api/blueprint_v100_test.go
b/plugins/jenkins/api/blueprint_v100_test.go
index acb49923e..a6b66e537 100644
--- a/plugins/jenkins/api/blueprint_v100_test.go
+++ b/plugins/jenkins/api/blueprint_v100_test.go
@@ -115,12 +115,7 @@ func TestProcessScope(t *testing.T) {
{
Plugin: "dora",
Subtasks: []string{"EnrichTaskEnv"},
- Options: map[string]interface{}{
- "prefix": "jenkins",
- "transformationRules":
map[string]interface{}{
- "productionPattern":
"(?i)build-and-deploy",
- },
- },
+ Options: map[string]interface{}{},
},
},
}
diff --git a/services/blueprint_makeplan_v100.go
b/services/blueprint_makeplan_v100.go
index c32c7f873..c22358139 100644
--- a/services/blueprint_makeplan_v100.go
+++ b/services/blueprint_makeplan_v100.go
@@ -68,7 +68,7 @@ func GeneratePlanJsonV100(settings *models.BlueprintSettings)
(core.PipelinePlan
plan := core.PipelineStage{
&core.PipelineTask{
Plugin: "dora",
- Subtasks: []string{"calculateChangeLeadTime",
"ConnectIncidentToDeployment"},
+ Subtasks:
[]string{"calculateChangeLeadTimeOld", "connectIncidentToDeploymentOld"},
Options: doraRules,
},
}