in backend/plugins/github_graphql/tasks/pr_extractor.go [41:159]
func ExtractPrs(taskCtx plugin.SubTaskContext) errors.Error {
data := taskCtx.GetData().(*githubTasks.GithubTaskData)
config := data.Options.ScopeConfig
var labelTypeRegex *regexp.Regexp
var labelComponentRegex *regexp.Regexp
var err errors.Error
if config != nil && len(config.PrType) > 0 {
labelTypeRegex, err = errors.Convert01(regexp.Compile(config.PrType))
if err != nil {
return errors.Default.Wrap(err, "regexp Compile prType failed")
}
}
if config != nil && len(config.PrComponent) > 0 {
labelComponentRegex, err = errors.Convert01(regexp.Compile(config.PrComponent))
if err != nil {
return errors.Default.Wrap(err, "regexp Compile prComponent failed")
}
}
extractor, err := api.NewApiExtractor(api.ApiExtractorArgs{
RawDataSubTaskArgs: api.RawDataSubTaskArgs{
Ctx: taskCtx,
Params: githubTasks.GithubApiParams{
ConnectionId: data.Options.ConnectionId,
Name: data.Options.Name,
},
Table: RAW_PRS_TABLE,
},
Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
rawL := &GraphqlQueryPr{}
err := errors.Convert(json.Unmarshal(row.Data, rawL))
if err != nil {
return nil, err
}
results := make([]interface{}, 0, 1)
githubPr, err := convertGithubPullRequest(rawL, data.Options.ConnectionId, data.Options.GithubId)
if err != nil {
return nil, err
}
extractGraphqlPreAccount(&results, rawL.Author, data.Options.GithubId, data.Options.ConnectionId)
for _, label := range rawL.Labels.Nodes {
results = append(results, &models.GithubPrLabel{
ConnectionId: data.Options.ConnectionId,
PullId: githubPr.GithubId,
LabelName: label.Name,
})
// if pr.Type has not been set and prType is set in .env, process the below
if labelTypeRegex != nil && labelTypeRegex.MatchString(label.Name) {
githubPr.Type = label.Name
}
// if pr.Component has not been set and prComponent is set in .env, process
if labelComponentRegex != nil && labelComponentRegex.MatchString(label.Name) {
githubPr.Component = label.Name
}
}
results = append(results, githubPr)
for _, apiPullRequestReview := range rawL.Reviews.Nodes {
if apiPullRequestReview.State != "PENDING" {
githubPrReview := &models.GithubPrReview{
ConnectionId: data.Options.ConnectionId,
GithubId: apiPullRequestReview.DatabaseId,
Body: apiPullRequestReview.Body,
State: apiPullRequestReview.State,
CommitSha: apiPullRequestReview.Commit.Oid,
GithubSubmitAt: apiPullRequestReview.SubmittedAt,
PullRequestId: githubPr.GithubId,
}
if apiPullRequestReview.Author != nil {
githubPrReview.AuthorUserId = apiPullRequestReview.Author.Id
githubPrReview.AuthorUsername = apiPullRequestReview.Author.Login
extractGraphqlPreAccount(&results, apiPullRequestReview.Author, data.Options.GithubId, data.Options.ConnectionId)
}
results = append(results, githubPrReview)
}
}
for _, apiReviewRequests := range rawL.ReviewRequests.Nodes {
githubReviewRequests := &models.GithubReviewer{
ConnectionId: data.Options.ConnectionId,
PullRequestId: githubPr.GithubId,
ReviewerId: apiReviewRequests.RequestedReviewer.User.Id,
Username: apiReviewRequests.RequestedReviewer.User.Login,
}
results = append(results, githubReviewRequests)
}
for _, apiPullRequestCommit := range rawL.Commits.Nodes {
githubCommit, err := convertPullRequestCommit(apiPullRequestCommit)
if err != nil {
return nil, err
}
results = append(results, githubCommit)
githubPullRequestCommit := &models.GithubPrCommit{
ConnectionId: data.Options.ConnectionId,
CommitSha: apiPullRequestCommit.Commit.Oid,
PullRequestId: githubPr.GithubId,
CommitAuthorName: githubCommit.AuthorName,
CommitAuthorEmail: githubCommit.AuthorEmail,
CommitAuthoredDate: githubCommit.AuthoredDate,
}
results = append(results, githubPullRequestCommit)
extractGraphqlPreAccount(&results, apiPullRequestCommit.Commit.Author.User, data.Options.GithubId, data.Options.ConnectionId)
}
return results, nil
},
})
if err != nil {
return err
}
return extractor.Execute()
}