fix: add flag for data convert to dora (#7143)

* fix: add flag for data convert to dora

* fix: some minor optimizations

* fix: add subtask_name filter
diff --git a/backend/core/models/domainlayer/devops/cicd_deployment.go b/backend/core/models/domainlayer/devops/cicd_deployment.go
index c395e32..b66e84f 100644
--- a/backend/core/models/domainlayer/devops/cicd_deployment.go
+++ b/backend/core/models/domainlayer/devops/cicd_deployment.go
@@ -33,6 +33,7 @@
 	TaskDatesInfo
 	DurationSec       *float64
 	QueuedDurationSec *float64
+	SubtaskName       string `gorm:"type:varchar(255)"`
 }
 
 func (CICDDeployment) TableName() string {
diff --git a/backend/core/models/domainlayer/devops/cicd_deployment_commit.go b/backend/core/models/domainlayer/devops/cicd_deployment_commit.go
index 4170268..2afbb86 100644
--- a/backend/core/models/domainlayer/devops/cicd_deployment_commit.go
+++ b/backend/core/models/domainlayer/devops/cicd_deployment_commit.go
@@ -40,6 +40,7 @@
 	RepoId                        string `gorm:"type:varchar(255)"`
 	RepoUrl                       string `gorm:"index;not null"`
 	PrevSuccessDeploymentCommitId string `gorm:"type:varchar(255)"`
+	SubtaskName                   string `gorm:"type:varchar(255)"`
 }
 
 func (cicdDeploymentCommit CicdDeploymentCommit) TableName() string {
diff --git a/backend/core/models/migrationscripts/20240308_add_subtaskname_to_deployment.go b/backend/core/models/migrationscripts/20240308_add_subtaskname_to_deployment.go
new file mode 100644
index 0000000..7bac0c3
--- /dev/null
+++ b/backend/core/models/migrationscripts/20240308_add_subtaskname_to_deployment.go
@@ -0,0 +1,63 @@
+/*
+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 migrationscripts
+
+import (
+	"github.com/apache/incubator-devlake/core/context"
+	"github.com/apache/incubator-devlake/core/errors"
+	"github.com/apache/incubator-devlake/core/plugin"
+)
+
+var _ plugin.MigrationScript = (*addSubtabknameToDeployment)(nil)
+
+type cicdDeployment20240308 struct {
+	SubtaskName string `gorm:"type:varchar(255)"`
+}
+
+func (cicdDeployment20240308) TableName() string {
+	return "cicd_deployments"
+}
+
+type cicdDeploymentCommits20240308 struct {
+	SubtaskName string `gorm:"type:varchar(255)"`
+}
+
+func (cicdDeploymentCommits20240308) TableName() string {
+	return "cicd_deployment_commits"
+}
+
+type addSubtabknameToDeployment struct{}
+
+func (*addSubtabknameToDeployment) Up(basicRes context.BasicRes) errors.Error {
+	db := basicRes.GetDal()
+	if err := db.AutoMigrate(&cicdDeployment20240308{}); err != nil {
+		return err
+	}
+	if err := db.AutoMigrate(&cicdDeploymentCommits20240308{}); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (*addSubtabknameToDeployment) Version() uint64 {
+	return 20240308142101
+}
+
+func (*addSubtabknameToDeployment) Name() string {
+	return "add subtaskname to deployment"
+}
diff --git a/backend/core/models/migrationscripts/register.go b/backend/core/models/migrationscripts/register.go
index 667f864..7732c01 100644
--- a/backend/core/models/migrationscripts/register.go
+++ b/backend/core/models/migrationscripts/register.go
@@ -106,5 +106,6 @@
 		new(modfiyFieldsSort),
 		new(modifyIssueLeadTimeMinutesToUint),
 		new(addUrgencyToIssues),
+		new(addSubtabknameToDeployment),
 	}
 }
diff --git a/backend/plugins/dora/tasks/change_lead_time_calculator.go b/backend/plugins/dora/tasks/change_lead_time_calculator.go
index c76b3d5..8e29f16 100644
--- a/backend/plugins/dora/tasks/change_lead_time_calculator.go
+++ b/backend/plugins/dora/tasks/change_lead_time_calculator.go
@@ -46,11 +46,11 @@
 	db := taskCtx.GetDal()
 	logger := taskCtx.GetLogger()
 	data := taskCtx.GetData().(*DoraTaskData)
-	// // Clear previous results from the project
-	// err := db.Exec("DELETE FROM project_pr_metrics WHERE project_name = ? ", data.Options.ProjectName)
-	// if err != nil {
-	// 	return errors.Default.Wrap(err, "error deleting previous project_pr_metrics")
-	// }
+	// Clear previous results from the project
+	err := db.Exec("DELETE FROM project_pr_metrics WHERE project_name = ? ", data.Options.ProjectName)
+	if err != nil {
+		return errors.Default.Wrap(err, "error deleting previous project_pr_metrics")
+	}
 
 	// Get pull requests by repo project_name
 	var clauses = []dal.Clause{
diff --git a/backend/plugins/dora/tasks/deployment_commits_generator.go b/backend/plugins/dora/tasks/deployment_commits_generator.go
index e8a64e2..e298469 100644
--- a/backend/plugins/dora/tasks/deployment_commits_generator.go
+++ b/backend/plugins/dora/tasks/deployment_commits_generator.go
@@ -30,6 +30,8 @@
 	"github.com/apache/incubator-devlake/helpers/pluginhelper/api"
 )
 
+const DORAGenerateDeploymentCommits = "dora.generateDeploymentCommits"
+
 var DeploymentCommitsGeneratorMeta = plugin.SubTaskMeta{
 	Name:             "generateDeploymentCommits",
 	EntryPoint:       GenerateDeploymentCommits,
@@ -103,32 +105,32 @@
 	}
 	if data.Options.ScopeId != nil {
 		clauses = append(clauses, dal.Where(`p.cicd_scope_id = ?`, data.Options.ScopeId))
-		// // Clear previous results from the project
-		// deleteSql := `DELETE FROM cicd_deployment_commits WHERE cicd_scope_id = ? ;`
-		// err := db.Exec(deleteSql, data.Options.ScopeId)
-		// if err != nil {
-		// 	return errors.Default.Wrap(err, "error deleting previous cicd_deployment_commits")
-		// }
+		// Clear previous results from the project
+		deleteSql := `DELETE FROM cicd_deployment_commits WHERE cicd_scope_id = ? and subtask_name = ?;`
+		err := db.Exec(deleteSql, data.Options.ScopeId, DORAGenerateDeploymentCommits)
+		if err != nil {
+			return errors.Default.Wrap(err, "error deleting previous cicd_deployment_commits")
+		}
 	} else {
 		clauses = append(clauses,
 			dal.Join("LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = p.cicd_scope_id)"),
 			dal.Where(`pm.project_name = ?`, data.Options.ProjectName),
 		)
-		// // Clear previous results from the project
-		// deleteSql := `DELETE FROM cicd_deployment_commits
-		// 	WHERE cicd_scope_id IN (
-		// 	SELECT cicd_scope_id
-		// 	FROM (
-		// 		SELECT cdc.cicd_scope_id
-		// 		FROM cicd_deployment_commits cdc
-		// 		LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = cdc.cicd_scope_id)
-		// 		WHERE pm.project_name = ?
-		// 	) AS subquery
-		// 	);`
-		// err := db.Exec(deleteSql, data.Options.ProjectName)
-		// if err != nil {
-		// 	return errors.Default.Wrap(err, "error deleting previous cicd_deployment_commits")
-		// }
+		// Clear previous results from the project
+		deleteSql := `DELETE FROM cicd_deployment_commits
+			WHERE cicd_scope_id IN (
+			SELECT cicd_scope_id
+			FROM (
+				SELECT cdc.cicd_scope_id
+				FROM cicd_deployment_commits cdc
+				LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = cdc.cicd_scope_id)
+				WHERE pm.project_name = ?
+			) AS subquery
+			) AND subtask_name = ?;`
+		err := db.Exec(deleteSql, data.Options.ProjectName, DORAGenerateDeploymentCommits)
+		if err != nil {
+			return errors.Default.Wrap(err, "error deleting previous cicd_deployment_commits")
+		}
 	}
 	cursor, err := db.Cursor(clauses...)
 	if err != nil {
@@ -198,6 +200,7 @@
 					domainDeployCommit.Environment = devops.TESTING
 				}
 			}
+			domainDeployCommit.SubtaskName = DORAGenerateDeploymentCommits
 			return []interface{}{domainDeployCommit}, nil
 		},
 	})
diff --git a/backend/plugins/dora/tasks/deployment_generator.go b/backend/plugins/dora/tasks/deployment_generator.go
index cca452d..08102fb 100644
--- a/backend/plugins/dora/tasks/deployment_generator.go
+++ b/backend/plugins/dora/tasks/deployment_generator.go
@@ -28,6 +28,8 @@
 	"github.com/apache/incubator-devlake/helpers/pluginhelper/api"
 )
 
+const DORAGenerateDeployment = "dora.generateDeployments"
+
 var DeploymentGeneratorMeta = plugin.SubTaskMeta{
 	Name:             "generateDeployments",
 	EntryPoint:       GenerateDeployment,
@@ -78,32 +80,32 @@
 		clauses = append(clauses,
 			dal.Where("p.cicd_scope_id = ?", data.Options.ScopeId),
 		)
-		// // Clear previous results from the cicd_scope_id
-		// deleteSql := `DELETE FROM cicd_deployments WHERE cicd_scope_id = ?;`
-		// err := db.Exec(deleteSql, data.Options.ScopeId)
-		// if err != nil {
-		// 	return errors.Default.Wrap(err, "error deleting previous deployments")
-		// }
+		// Clear previous results from the cicd_scope_id
+		deleteSql := `DELETE FROM cicd_deployments WHERE cicd_scope_id = ? and subtask_name = ?;`
+		err := db.Exec(deleteSql, data.Options.ScopeId, DORAGenerateDeployment)
+		if err != nil {
+			return errors.Default.Wrap(err, "error deleting previous deployments")
+		}
 	} else {
 		clauses = append(clauses,
 			dal.Join("LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = p.cicd_scope_id)"),
 			dal.Where("pm.project_name = ?", data.Options.ProjectName),
 		)
-		// // Clear previous results from the project
-		// deleteSql := `DELETE FROM cicd_deployments
-		// 		WHERE cicd_scope_id IN (
-		// 		SELECT cicd_scope_id
-		// 		FROM (
-		// 			SELECT cd.cicd_scope_id
-		// 			FROM cicd_deployments cd
-		// 			LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = cd.cicd_scope_id)
-		// 			WHERE pm.project_name = ?
-		// 		) AS subquery
-		// 		);`
-		// err := db.Exec(deleteSql, data.Options.ProjectName)
-		// if err != nil {
-		// 	return errors.Default.Wrap(err, "error deleting previous deployments")
-		// }
+		// Clear previous results from the project
+		deleteSql := `DELETE FROM cicd_deployments
+				WHERE cicd_scope_id IN (
+				SELECT cicd_scope_id
+				FROM (
+					SELECT cd.cicd_scope_id
+					FROM cicd_deployments cd
+					LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = cd.cicd_scope_id)
+					WHERE pm.project_name = ?
+				) AS subquery
+				) AND subtask_name = ?;`
+		err := db.Exec(deleteSql, data.Options.ProjectName, DORAGenerateDeployment)
+		if err != nil {
+			return errors.Default.Wrap(err, "error deleting previous deployments")
+		}
 	}
 
 	cursor, err := db.Cursor(clauses...)
@@ -153,6 +155,7 @@
 					domainDeployment.Environment = devops.TESTING
 				}
 			}
+			domainDeployment.SubtaskName = DORAGenerateDeployment
 			return []interface{}{domainDeployment}, nil
 		},
 	})
diff --git a/backend/plugins/dora/tasks/incident_deploy_connector.go b/backend/plugins/dora/tasks/incident_deploy_connector.go
index 2ec9f04c..6d9a136 100644
--- a/backend/plugins/dora/tasks/incident_deploy_connector.go
+++ b/backend/plugins/dora/tasks/incident_deploy_connector.go
@@ -47,11 +47,11 @@
 func ConnectIncidentToDeployment(taskCtx plugin.SubTaskContext) errors.Error {
 	db := taskCtx.GetDal()
 	data := taskCtx.GetData().(*DoraTaskData)
-	// // Clear previous results from the project
-	// err := db.Exec("DELETE FROM project_issue_metrics WHERE project_name = ?", data.Options.ProjectName)
-	// if err != nil {
-	// 	return errors.Default.Wrap(err, "error deleting previous project_issue_metrics")
-	// }
+	// Clear previous results from the project
+	err := db.Exec("DELETE FROM project_issue_metrics WHERE project_name = ?", data.Options.ProjectName)
+	if err != nil {
+		return errors.Default.Wrap(err, "error deleting previous project_issue_metrics")
+	}
 	// select all issues belongs to the board
 	clauses := []dal.Clause{
 		dal.From(`issues i`),