in backend/plugins/gitee/tasks/issue_extractor.go [100:209]
func ExtractApiIssues(taskCtx plugin.SubTaskContext) errors.Error {
rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_ISSUE_TABLE)
config := data.Options.ScopeConfig
var issueSeverityRegex *regexp.Regexp
var issueComponentRegex *regexp.Regexp
var issuePriorityRegex *regexp.Regexp
var issueTypeBugRegex *regexp.Regexp
var issueTypeRequirementRegex *regexp.Regexp
var issueTypeIncidentRegex *regexp.Regexp
var issueSeverity = config.IssueSeverity
var err error
if len(issueSeverity) > 0 {
issueSeverityRegex, err = regexp.Compile(issueSeverity)
if err != nil {
return errors.Default.Wrap(err, "regexp Compile issueSeverity failed")
}
}
var issueComponent = config.IssueComponent
if len(issueComponent) > 0 {
issueComponentRegex, err = regexp.Compile(issueComponent)
if err != nil {
return errors.Default.Wrap(err, "regexp Compile issueComponent failed")
}
}
var issuePriority = config.IssuePriority
if len(issuePriority) > 0 {
issuePriorityRegex, err = regexp.Compile(issuePriority)
if err != nil {
return errors.Default.Wrap(err, "regexp Compile issuePriority failed")
}
}
var issueTypeBug = config.IssueTypeBug
if len(issueTypeBug) > 0 {
issueTypeBugRegex, err = regexp.Compile(issueTypeBug)
if err != nil {
return errors.Default.Wrap(err, "regexp Compile issueTypeBug failed")
}
}
var issueTypeRequirement = config.IssueTypeRequirement
if len(issueTypeRequirement) > 0 {
issueTypeRequirementRegex, err = regexp.Compile(issueTypeRequirement)
if err != nil {
return errors.Default.Wrap(err, "regexp Compile issueTypeRequirement failed")
}
}
var issueTypeIncident = config.IssueTypeIncident
if len(issueTypeIncident) > 0 {
issueTypeIncidentRegex, err = regexp.Compile(issueTypeIncident)
if err != nil {
return errors.Default.Wrap(err, "regexp Compile issueTypeIncident failed")
}
}
extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{
RawDataSubTaskArgs: *rawDataSubTaskArgs,
Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
body := &IssuesResponse{}
err := errors.Convert(json.Unmarshal(row.Data, body))
if err != nil {
return nil, err
}
// need to extract 2 kinds of entities here
if body.GiteeId == 0 {
return nil, nil
}
//If this is a pr, ignore
if body.PullRequest.Url != "" {
return nil, nil
}
results := make([]interface{}, 0, 2)
giteeIssue, err := convertGiteeIssue(body, data.Options.ConnectionId, data.Repo.GiteeId)
if err != nil {
return nil, err
}
for _, label := range body.Labels {
results = append(results, &models.GiteeIssueLabel{
ConnectionId: data.Options.ConnectionId,
IssueId: giteeIssue.GiteeId,
LabelName: label.Name,
})
if issueSeverityRegex != nil && issueSeverityRegex.MatchString(label.Name) {
giteeIssue.Severity = label.Name
}
if issueComponentRegex != nil && issueComponentRegex.MatchString(label.Name) {
giteeIssue.Component = label.Name
}
if issuePriorityRegex != nil && issuePriorityRegex.MatchString(label.Name) {
giteeIssue.Priority = label.Name
}
if issueTypeRequirementRegex != nil && issueTypeRequirementRegex.MatchString(label.Name) {
giteeIssue.Type = ticket.REQUIREMENT
} else if issueTypeBugRegex != nil && issueTypeBugRegex.MatchString(label.Name) {
giteeIssue.Type = ticket.BUG
} else if issueTypeIncidentRegex != nil && issueTypeIncidentRegex.MatchString(label.Name) {
giteeIssue.Type = ticket.INCIDENT
}
}
results = append(results, giteeIssue)
return results, nil
},
})
if err != nil {
return errors.Default.Wrap(err, "GitTee extraction initiation error")
}
return extractor.Execute()
}