This is an automated email from the ASF dual-hosted git repository.
abeizn 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 aafac0332 fix(gitlab): add envNamePattern, and fix missing ScopeConfig
(#6343)
aafac0332 is described below
commit aafac0332ee141e1e49429fe4c720ad9dd291fa5
Author: Lynwee <[email protected]>
AuthorDate: Thu Oct 26 18:27:28 2023 +0800
fix(gitlab): add envNamePattern, and fix missing ScopeConfig (#6343)
---
.../helpers/pluginhelper/api/enrich_with_regex.go | 2 +-
backend/plugins/gitlab/impl/impl.go | 8 ++++
...v_name_pattern_to_tool_gitlab_scope_configs.go} | 49 ++++++++++++----------
.../gitlab/models/migrationscripts/register.go | 1 +
backend/plugins/gitlab/models/scope_config.go | 1 +
.../plugins/gitlab/tasks/deployment_convertor.go | 4 +-
backend/plugins/gitlab/tasks/task_data.go | 3 --
7 files changed, 42 insertions(+), 26 deletions(-)
diff --git a/backend/helpers/pluginhelper/api/enrich_with_regex.go
b/backend/helpers/pluginhelper/api/enrich_with_regex.go
index 92e0c0b28..5e7bd2a3a 100644
--- a/backend/helpers/pluginhelper/api/enrich_with_regex.go
+++ b/backend/helpers/pluginhelper/api/enrich_with_regex.go
@@ -98,7 +98,7 @@ func (r *RegexEnricher) ReturnNameIfMatched(name string,
targets ...string) stri
return ""
}
-// ReturnNameIfMatchedOrOmitted returns the given name if regex of the given
name is omitted or fallback to ReturnNameIfMatched
+// ReturnNameIfOmittedOrMatched returns the given name if regex of the given
name is omitted or fallback to ReturnNameIfMatched
func (r *RegexEnricher) ReturnNameIfOmittedOrMatched(name string, targets
...string) string {
if _, ok := r.regexpMap[name]; !ok {
return name
diff --git a/backend/plugins/gitlab/impl/impl.go
b/backend/plugins/gitlab/impl/impl.go
index afa9e10c3..bf25186f9 100644
--- a/backend/plugins/gitlab/impl/impl.go
+++ b/backend/plugins/gitlab/impl/impl.go
@@ -156,6 +156,11 @@ func (p Gitlab) PrepareTaskData(taskCtx
plugin.TaskContext, options map[string]i
// If we still cannot find the record in db, we have to request
from remote server and save it to db
db := taskCtx.GetDal()
err = db.First(&scope, dal.Where("connection_id = ? AND
gitlab_id = ?", op.ConnectionId, op.ProjectId))
+ if err == nil {
+ if op.ScopeConfigId == 0 && scope.ScopeConfigId != 0 {
+ op.ScopeConfigId = scope.ScopeConfigId
+ }
+ }
if err != nil && db.IsErrorNotFound(err) {
var project *models.GitlabApiProject
project, err = api.GetApiProject(op, apiClient)
@@ -196,6 +201,9 @@ func (p Gitlab) PrepareTaskData(taskCtx plugin.TaskContext,
options map[string]i
if err := regexEnricher.TryAdd(devops.PRODUCTION,
op.ScopeConfig.ProductionPattern); err != nil {
return nil, errors.BadInput.Wrap(err, "invalid value for
`productionPattern`")
}
+ if err := regexEnricher.TryAdd(devops.ENV_NAME_PATTERN,
op.ScopeConfig.EnvNamePattern); err != nil {
+ return nil, errors.BadInput.Wrap(err, "invalid value for
`envNamePattern`")
+ }
taskData := tasks.GitlabTaskData{
Options: op,
diff --git a/backend/plugins/gitlab/models/migrationscripts/register.go
b/backend/plugins/gitlab/models/migrationscripts/20231026_add_env_name_pattern_to_tool_gitlab_scope_configs.go
similarity index 50%
copy from backend/plugins/gitlab/models/migrationscripts/register.go
copy to
backend/plugins/gitlab/models/migrationscripts/20231026_add_env_name_pattern_to_tool_gitlab_scope_configs.go
index c6c547d2e..49e748779 100644
--- a/backend/plugins/gitlab/models/migrationscripts/register.go
+++
b/backend/plugins/gitlab/models/migrationscripts/20231026_add_env_name_pattern_to_tool_gitlab_scope_configs.go
@@ -18,28 +18,35 @@ 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"
+ "github.com/apache/incubator-devlake/helpers/migrationhelper"
)
-// All return all the migration scripts
-func All() []plugin.MigrationScript {
- return []plugin.MigrationScript{
- new(addInitTables),
- new(addGitlabCI),
- new(addPipelineID),
- new(addPipelineProjects),
- new(fixDurationToFloat8),
- new(addTransformationRule20221125),
- new(addStdTypeToIssue221230),
- new(addIsDetailRequired20230210),
- new(addConnectionIdToTransformationRule),
- new(addGitlabCommitAuthorInfo),
- new(addTypeEnvToPipeline),
- new(renameTr2ScopeConfig),
- new(addGitlabIssueAssignee),
- new(addMrCommitSha),
- new(addRawParamTableForScope),
- new(addProjectArchived),
- new(addDeployment),
- }
+var _ plugin.MigrationScript = (*addEnvNamePattern)(nil)
+
+type scopeConfig20231026 struct {
+ EnvNamePattern string `mapstructure:"envNamePattern,omitempty"
json:"envNamePattern" gorm:"type:varchar(255)"`
+}
+
+func (scopeConfig20231026) TableName() string {
+ return "_tool_gitlab_scope_configs"
+}
+
+type addEnvNamePattern struct{}
+
+func (script *addEnvNamePattern) Up(basicRes context.BasicRes) errors.Error {
+ return migrationhelper.AutoMigrateTables(
+ basicRes,
+ &scopeConfig20231026{},
+ )
+}
+
+func (*addEnvNamePattern) Version() uint64 {
+ return 20231026165000
+}
+
+func (script *addEnvNamePattern) Name() string {
+ return "add env_name_pattern to _tool_gitlab_scope_configs"
}
diff --git a/backend/plugins/gitlab/models/migrationscripts/register.go
b/backend/plugins/gitlab/models/migrationscripts/register.go
index c6c547d2e..49dce25c2 100644
--- a/backend/plugins/gitlab/models/migrationscripts/register.go
+++ b/backend/plugins/gitlab/models/migrationscripts/register.go
@@ -41,5 +41,6 @@ func All() []plugin.MigrationScript {
new(addRawParamTableForScope),
new(addProjectArchived),
new(addDeployment),
+ new(addEnvNamePattern),
}
}
diff --git a/backend/plugins/gitlab/models/scope_config.go
b/backend/plugins/gitlab/models/scope_config.go
index 23bc35c34..d74d2b9a4 100644
--- a/backend/plugins/gitlab/models/scope_config.go
+++ b/backend/plugins/gitlab/models/scope_config.go
@@ -37,6 +37,7 @@ type GitlabScopeConfig struct {
IssueTypeRequirement string
`mapstructure:"issueTypeRequirement" json:"issueTypeRequirement"`
DeploymentPattern string
`mapstructure:"deploymentPattern" json:"deploymentPattern"`
ProductionPattern string
`mapstructure:"productionPattern,omitempty" json:"productionPattern"
gorm:"type:varchar(255)"`
+ EnvNamePattern string
`mapstructure:"envNamePattern,omitempty" json:"envNamePattern"
gorm:"type:varchar(255)"`
Refdiff datatypes.JSONMap
`mapstructure:"refdiff,omitempty" json:"refdiff" swaggertype:"object"
format:"json"`
}
diff --git a/backend/plugins/gitlab/tasks/deployment_convertor.go
b/backend/plugins/gitlab/tasks/deployment_convertor.go
index 480806adc..e1f9b87df 100644
--- a/backend/plugins/gitlab/tasks/deployment_convertor.go
+++ b/backend/plugins/gitlab/tasks/deployment_convertor.go
@@ -120,7 +120,9 @@ func ConvertDeployment(taskCtx plugin.SubTaskContext)
errors.Error {
domainDeployCommit.DurationSec = duration
}
if data.RegexEnricher != nil {
- domainDeployCommit.Environment =
data.RegexEnricher.ReturnNameIfOmittedOrMatched(devops.PRODUCTION,
gitlabDeployment.Environment)
+ if
data.RegexEnricher.ReturnNameIfMatched(devops.ENV_NAME_PATTERN,
gitlabDeployment.Environment) != "" {
+ domainDeployCommit.Environment =
devops.PRODUCTION
+ }
}
domainDeployCommit.CicdDeploymentId =
domainDeployCommit.Id
diff --git a/backend/plugins/gitlab/tasks/task_data.go
b/backend/plugins/gitlab/tasks/task_data.go
index 45e4abe3b..0eaa36e45 100644
--- a/backend/plugins/gitlab/tasks/task_data.go
+++ b/backend/plugins/gitlab/tasks/task_data.go
@@ -49,8 +49,5 @@ func DecodeAndValidateTaskOptions(options
map[string]interface{}) (*GitlabOption
if op.ConnectionId == 0 {
return nil, errors.BadInput.New("connectionId is invalid")
}
- if op.ScopeConfig == nil && op.ScopeConfigId == 0 {
- op.ScopeConfig = new(models.GitlabScopeConfig)
- }
return &op, nil
}