You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by kl...@apache.org on 2024/02/20 11:58:53 UTC
(incubator-devlake) branch main updated: feat(cicd): generate deployment in cicd plugin (#6965)
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 32543102b feat(cicd): generate deployment in cicd plugin (#6965)
32543102b is described below
commit 32543102bc1f40eec7b5c6667fe6a1549cb87af8
Author: Leric Zhang <li...@merico.dev>
AuthorDate: Tue Feb 20 19:58:48 2024 +0800
feat(cicd): generate deployment in cicd plugin (#6965)
---
.../dora/tasks/deployment_commits_generator.go | 34 ++++++++++++----------
backend/plugins/dora/tasks/deployment_generator.go | 33 ++++++++++++---------
.../dora/tasks/prev_deployment_commit_enricher.go | 33 ++++++++++++++-------
backend/plugins/dora/tasks/task_data.go | 3 +-
4 files changed, 62 insertions(+), 41 deletions(-)
diff --git a/backend/plugins/dora/tasks/deployment_commits_generator.go b/backend/plugins/dora/tasks/deployment_commits_generator.go
index 9fc53c479..85da0e5fe 100644
--- a/backend/plugins/dora/tasks/deployment_commits_generator.go
+++ b/backend/plugins/dora/tasks/deployment_commits_generator.go
@@ -62,7 +62,7 @@ func GenerateDeploymentCommits(taskCtx plugin.SubTaskContext) errors.Error {
// select all cicd_pipeline_commits from all "Deployments" in the project
// Note that failed records shall be included as well
noneSkippedResult := []string{devops.RESULT_FAILURE, devops.RESULT_SUCCESS}
- cursor, err := db.Cursor(
+ var clauses = []dal.Clause{
dal.Select(
`
pc.*,
@@ -77,12 +77,9 @@ func GenerateDeploymentCommits(taskCtx plugin.SubTaskContext) errors.Error {
p.cicd_scope_id,
p.original_status,
p.original_result,
- EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?)
- as has_testing_tasks,
- EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?)
- as has_staging_tasks,
- EXISTS( SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?)
- as has_production_tasks
+ EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?) as has_testing_tasks,
+ EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?) as has_staging_tasks,
+ EXISTS( SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?) as has_production_tasks
`,
devops.TESTING, noneSkippedResult,
devops.STAGING, noneSkippedResult,
@@ -90,22 +87,27 @@ func GenerateDeploymentCommits(taskCtx plugin.SubTaskContext) errors.Error {
),
dal.From("cicd_pipeline_commits pc"),
dal.Join("LEFT JOIN cicd_pipelines p ON (p.id = pc.pipeline_id)"),
- 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 = ? AND (
- p.type = ? OR EXISTS(
- SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.type = ? AND t.result IN ?
- )
- ) AND p.result IN ?
+ p.result IN ? AND (
+ p.type = ? OR EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.type = ? AND t.result IN ?)
+ )
`,
- data.Options.ProjectName,
+ noneSkippedResult,
devops.DEPLOYMENT,
devops.DEPLOYMENT,
noneSkippedResult,
- noneSkippedResult,
),
- )
+ }
+ if data.Options.ScopeId != nil {
+ clauses = append(clauses, dal.Where(`p.cicd_scope_id = ?`, data.Options.ScopeId))
+ } 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),
+ )
+ }
+ cursor, err := db.Cursor(clauses...)
if err != nil {
return err
}
diff --git a/backend/plugins/dora/tasks/deployment_generator.go b/backend/plugins/dora/tasks/deployment_generator.go
index b52c99191..3ae9da7e6 100644
--- a/backend/plugins/dora/tasks/deployment_generator.go
+++ b/backend/plugins/dora/tasks/deployment_generator.go
@@ -49,7 +49,7 @@ func GenerateDeployment(taskCtx plugin.SubTaskContext) errors.Error {
data := taskCtx.GetData().(*DoraTaskData)
// Note that failed records shall be included as well
noneSkippedResult := []string{devops.RESULT_FAILURE, devops.RESULT_SUCCESS}
- cursor, err := db.Cursor(
+ var clauses = []dal.Clause{
dal.Select(
`
p.*,
@@ -57,7 +57,7 @@ func GenerateDeployment(taskCtx plugin.SubTaskContext) errors.Error {
as has_testing_tasks,
EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?)
as has_staging_tasks,
- EXISTS( SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?)
+ EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.environment = ? AND t.result IN ?)
as has_production_tasks
`,
devops.TESTING, noneSkippedResult,
@@ -65,22 +65,27 @@ func GenerateDeployment(taskCtx plugin.SubTaskContext) errors.Error {
devops.PRODUCTION, noneSkippedResult,
),
dal.From("cicd_pipelines p"),
- 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 = ? AND (
- p.type = ? OR EXISTS(
- SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.type = ? AND t.result IN ?
- )
- ) AND p.result IN ?
- `,
- data.Options.ProjectName,
+ dal.Where(`
+ p.result IN ? AND (
+ p.type = ? OR EXISTS(SELECT 1 FROM cicd_tasks t WHERE t.pipeline_id = p.id AND t.type = ? AND t.result IN ?)
+ )`,
+ noneSkippedResult,
devops.DEPLOYMENT,
devops.DEPLOYMENT,
noneSkippedResult,
- noneSkippedResult,
),
- )
+ }
+ if data.Options.ScopeId != nil {
+ clauses = append(clauses,
+ dal.Where("p.cicd_scope_id = ?", data.Options.ScopeId),
+ )
+ } 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),
+ )
+ }
+ cursor, err := db.Cursor(clauses...)
if err != nil {
return err
}
diff --git a/backend/plugins/dora/tasks/prev_deployment_commit_enricher.go b/backend/plugins/dora/tasks/prev_deployment_commit_enricher.go
index 20047bb5f..69c68a9f6 100644
--- a/backend/plugins/dora/tasks/prev_deployment_commit_enricher.go
+++ b/backend/plugins/dora/tasks/prev_deployment_commit_enricher.go
@@ -47,21 +47,34 @@ func EnrichPrevSuccessDeploymentCommit(taskCtx plugin.SubTaskContext) errors.Err
data := taskCtx.GetData().(*DoraTaskData)
// step 1. select all successful deployments in the project and sort them by cicd_scope_id, repo_url, env
// and finished_date
- cursor, err := db.Cursor(
+ var clauses = []dal.Clause{
dal.Select("dc.*"),
dal.From("cicd_deployment_commits dc"),
- dal.Join("LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = dc.cicd_scope_id)"),
- dal.Where(
- `
+ dal.Where(`
dc.finished_date IS NOT NULL
- AND dc.environment IS NOT NULL AND dc.environment != ''
- AND dc.repo_url IS NOT NULL AND dc.repo_url != ''
- AND pm.project_name = ? AND dc.result = ?
+ AND dc.environment IS NOT NULL
+ AND dc.environment != ''
+ AND dc.repo_url IS NOT NULL
+ AND dc.repo_url != ''
+ AND dc.result = ?
`,
- data.Options.ProjectName, devops.RESULT_SUCCESS,
+ devops.RESULT_SUCCESS,
),
- dal.Orderby(`dc.cicd_scope_id, dc.repo_url, dc.environment, dc.finished_date`),
- )
+ }
+ if data.Options.ScopeId != nil {
+ clauses = append(clauses,
+ dal.Where("dc.cicd_scope_id = ?", data.Options.ScopeId),
+ dal.Orderby("dc.repo_url, dc.environment, dc.finished_date"),
+ )
+ } else {
+ clauses = append(clauses,
+ dal.Join("LEFT JOIN project_mapping pm ON (pm.table = 'cicd_scopes' AND pm.row_id = dc.cicd_scope_id)"),
+ dal.Where("pm.project_name = ?", data.Options.ProjectName),
+ dal.Orderby("dc.cicd_scope_id, dc.repo_url, dc.environment, dc.finished_date"),
+ )
+ }
+
+ cursor, err := db.Cursor(clauses...)
if err != nil {
return err
}
diff --git a/backend/plugins/dora/tasks/task_data.go b/backend/plugins/dora/tasks/task_data.go
index 150b2a0f1..0af005446 100644
--- a/backend/plugins/dora/tasks/task_data.go
+++ b/backend/plugins/dora/tasks/task_data.go
@@ -29,7 +29,8 @@ type DoraApiParams struct {
type DoraOptions struct {
Tasks []string `json:"tasks,omitempty"`
Since string
- ProjectName string `json:"projectName"`
+ ProjectName string `json:"projectName"`
+ ScopeId *string `json:"scopeId,omitempty"`
}
type DoraTaskData struct {