This is an automated email from the ASF dual-hosted git repository.

zhangliang2022 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 ad800f89 feat: jira support define standard status (#2881)
ad800f89 is described below

commit ad800f89ebd5aad0345b889d5504d8a8f3b31f1c
Author: mappjzc <[email protected]>
AuthorDate: Wed Aug 31 21:23:11 2022 +0800

    feat: jira support define standard status (#2881)
    
    * feat: jira support define standard status
    
    Add support define StandardStatus.
    
    Nddtfjiang <[email protected]>
    
    * fix: debug fix
    
    Add debug test code and remove it.
    Fix some problem.
    
    Nddtfjiang <[email protected]>
    
    * style: review fix
    
    Remove pointer of StatusMappings by review.
    
    Nddtfjiang <[email protected]>
---
 plugins/jira/api/swagger.go           | 15 ++++-----------
 plugins/jira/tasks/issue_extractor.go | 15 +++++++++++----
 plugins/jira/tasks/task_data.go       |  7 ++++++-
 runner/run_task.go                    |  3 ++-
 services/blueprint.go                 | 11 +++++++++--
 5 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/plugins/jira/api/swagger.go b/plugins/jira/api/swagger.go
index b27c7463..d9122162 100644
--- a/plugins/jira/api/swagger.go
+++ b/plugins/jira/api/swagger.go
@@ -17,6 +17,8 @@ limitations under the License.
 
 package api
 
+import "github.com/apache/incubator-devlake/plugins/jira/tasks"
+
 // @Summary blueprints setting for jira
 // @Description blueprint setting for jira
 // @Tags plugins/jira
@@ -31,7 +33,7 @@ type JiraBlueprintSetting []struct {
                Plugin       string `json:"plugin"`
                ConnectionID int    `json:"connectionId"`
                Scope        []struct {
-                       Transformation TicketTransformationRules 
`json:"transformation"`
+                       Transformation tasks.TransformationRules 
`json:"transformation"`
                        Options        struct {
                                BoardId uint64 `json:"boardId"`
                                Since   string `json:"since"`
@@ -41,15 +43,6 @@ type JiraBlueprintSetting []struct {
        } `json:"connections"`
 }
 
-type TicketTransformationRules struct {
-       EpicKeyField               string `json:"epicKeyField"`
-       StoryPointField            string `json:"storyPointField"`
-       RemotelinkCommitShaPattern string `json:"remotelinkCommitShaPattern"`
-       TypeMappings               map[string]struct {
-               StandardType string `json:"standardType"`
-       } `json:"typeMappings"`
-}
-
 // @Summary pipelines plan for jira
 // @Description pipelines plan for jira
 // @Tags plugins/jira
@@ -64,6 +57,6 @@ type JiraPipelinePlan [][]struct {
        Options  struct {
                BoardID             int                       `json:"boardId"`
                ConnectionID        int                       
`json:"connectionId"`
-               TransformationRules TicketTransformationRules 
`json:"transformationRules"`
+               TransformationRules tasks.TransformationRules 
`json:"transformationRules"`
        } `json:"options"`
 }
diff --git a/plugins/jira/tasks/issue_extractor.go 
b/plugins/jira/tasks/issue_extractor.go
index a5dc4da6..bb731d05 100644
--- a/plugins/jira/tasks/issue_extractor.go
+++ b/plugins/jira/tasks/issue_extractor.go
@@ -42,8 +42,9 @@ var ExtractIssuesMeta = core.SubTaskMeta{
 }
 
 type typeMappings struct {
-       typeIdMappings  map[string]string
-       stdTypeMappings map[string]string
+       typeIdMappings         map[string]string
+       stdTypeMappings        map[string]string
+       standardStatusMappings map[string]StatusMappings
 }
 
 func ExtractIssues(taskCtx core.SubTaskContext) error {
@@ -129,6 +130,9 @@ func extractIssues(data *JiraTaskData, mappings 
*typeMappings, ignoreBoard bool,
                issue.StdType = strings.ToUpper(issue.Type)
        }
        issue.StdStatus = getStdStatus(issue.StatusKey)
+       if value, ok := 
mappings.standardStatusMappings[issue.Type][issue.StatusKey]; ok {
+               issue.StdStatus = value.StandardStatus
+       }
        results = append(results, issue)
        for _, worklog := range worklogs {
                results = append(results, worklog)
@@ -184,11 +188,14 @@ func getTypeMappings(data *JiraTaskData, db dal.Dal) 
(*typeMappings, error) {
                typeIdMapping[issueType.Id] = issueType.UntranslatedName
        }
        stdTypeMappings := make(map[string]string)
+       standardStatusMappings := make(map[string]StatusMappings)
        for userType, stdType := range 
data.Options.TransformationRules.TypeMappings {
                stdTypeMappings[userType] = 
strings.ToUpper(stdType.StandardType)
+               standardStatusMappings[userType] = stdType.StatusMappings
        }
        return &typeMappings{
-               typeIdMappings:  typeIdMapping,
-               stdTypeMappings: stdTypeMappings,
+               typeIdMappings:         typeIdMapping,
+               stdTypeMappings:        stdTypeMappings,
+               standardStatusMappings: standardStatusMappings,
        }, nil
 }
diff --git a/plugins/jira/tasks/task_data.go b/plugins/jira/tasks/task_data.go
index 4d765e99..039e4080 100644
--- a/plugins/jira/tasks/task_data.go
+++ b/plugins/jira/tasks/task_data.go
@@ -26,12 +26,17 @@ import (
        "github.com/mitchellh/mapstructure"
 )
 
+type StatusMappings map[string]struct {
+       StandardStatus string `json:"standardStatus"`
+}
+
 type TransformationRules struct {
        EpicKeyField               string `json:"epicKeyField"`
        StoryPointField            string `json:"storyPointField"`
        RemotelinkCommitShaPattern string `json:"remotelinkCommitShaPattern"`
        TypeMappings               map[string]struct {
-               StandardType string `json:"standardType"`
+               StandardType   string         `json:"standardType"`
+               StatusMappings StatusMappings `json:"statusMappings"`
        } `json:"typeMappings"`
 }
 
diff --git a/runner/run_task.go b/runner/run_task.go
index 1f5c2828..b1a21abb 100644
--- a/runner/run_task.go
+++ b/runner/run_task.go
@@ -21,9 +21,10 @@ import (
        "context"
        "encoding/json"
        "fmt"
-       "github.com/apache/incubator-devlake/logger"
        "time"
 
+       "github.com/apache/incubator-devlake/logger"
+
        "github.com/apache/incubator-devlake/config"
        "github.com/apache/incubator-devlake/errors"
        "github.com/apache/incubator-devlake/models"
diff --git a/services/blueprint.go b/services/blueprint.go
index 1c2544c7..bb72c942 100644
--- a/services/blueprint.go
+++ b/services/blueprint.go
@@ -107,6 +107,7 @@ func validateBlueprint(blueprint *models.Blueprint) error {
        if strings.ToLower(blueprint.CronConfig) == "manual" {
                blueprint.IsManual = true
        }
+
        if !blueprint.IsManual {
                _, err = cron.ParseStandard(blueprint.CronConfig)
                if err != nil {
@@ -116,6 +117,7 @@ func validateBlueprint(blueprint *models.Blueprint) error {
        if blueprint.Mode == models.BLUEPRINT_MODE_ADVANCED {
                plan := make(core.PipelinePlan, 0)
                err = json.Unmarshal(blueprint.Plan, &plan)
+
                if err != nil {
                        return fmt.Errorf("invalid plan: %w", err)
                }
@@ -129,6 +131,7 @@ func validateBlueprint(blueprint *models.Blueprint) error {
                        return fmt.Errorf("invalid plan: %w", err)
                }
        }
+
        return nil
 }
 
@@ -141,6 +144,7 @@ func PatchBlueprint(id uint64, body map[string]interface{}) 
(*models.Blueprint,
        }
        originMode := blueprint.Mode
        err = helper.DecodeMapStruct(body, blueprint)
+
        if err != nil {
                return nil, err
        }
@@ -153,11 +157,13 @@ func PatchBlueprint(id uint64, body 
map[string]interface{}) (*models.Blueprint,
        if err != nil {
                return nil, err
        }
+
        // save
        err = db.Save(blueprint).Error
        if err != nil {
                return nil, errors.InternalError
        }
+
        // reload schedule
        err = ReloadBlueprints(cronManager)
        if err != nil {
@@ -238,9 +244,9 @@ func createPipelineByBlueprint(blueprintId uint64, name 
string, plan core.Pipeli
 func GeneratePlanJson(settings json.RawMessage) (json.RawMessage, error) {
        bpSettings := new(models.BlueprintSettings)
        err := json.Unmarshal(settings, bpSettings)
+
        if err != nil {
-               fmt.Println(string(settings))
-               return nil, err
+               return nil, fmt.Errorf("settings:%s:%s", string(settings), 
err.Error())
        }
        var plan interface{}
        switch bpSettings.Version {
@@ -262,6 +268,7 @@ func GeneratePlanJsonV100(settings 
*models.BlueprintSettings) (core.PipelinePlan
        if err != nil {
                return nil, err
        }
+
        plans := make([]core.PipelinePlan, len(connections))
        for i, connection := range connections {
                if len(connection.Scope) == 0 {

Reply via email to