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 b7fca146a fix(github_graphql): Update Extract Jobs task to use Check
Run instead of Check Suite (#8384)
b7fca146a is described below
commit b7fca146a244620be60f1d2d40cbaa59156dd8fe
Author: benduncan-tote <[email protected]>
AuthorDate: Mon Apr 21 10:37:37 2025 +0100
fix(github_graphql): Update Extract Jobs task to use Check Run instead of
Check Suite (#8384)
Co-authored-by: Klesh Wong <[email protected]>
---
.../plugins/github_graphql/tasks/job_collector.go | 58 +++++++++++----------
.../plugins/github_graphql/tasks/job_extractor.go | 60 ++++++++++------------
2 files changed, 56 insertions(+), 62 deletions(-)
diff --git a/backend/plugins/github_graphql/tasks/job_collector.go
b/backend/plugins/github_graphql/tasks/job_collector.go
index af25d5897..c73ecfa5d 100644
--- a/backend/plugins/github_graphql/tasks/job_collector.go
+++ b/backend/plugins/github_graphql/tasks/job_collector.go
@@ -55,38 +55,40 @@ type GraphqlQueryCheckSuite struct {
EndCursor string `graphql:"endCursor"`
HasNextPage bool `graphql:"hasNextPage"`
}
- Nodes []struct {
- Id string
- Name string
- DetailsUrl string
- DatabaseId int
- Status string
- StartedAt *time.Time
- Conclusion string
- CompletedAt *time.Time
- //ExternalId string
- //Url string
- //Title interface{}
- //Text interface{}
- //Summary interface{}
-
- Steps struct {
- TotalCount int
- Nodes []struct {
- CompletedAt *time.Time
`json:"completed_at"`
- Conclusion string
`json:"conclusion"`
- Name string
`json:"name"`
- Number int
`json:"number"`
- SecondsToCompletion int
`json:"seconds_to_completion"`
- StartedAt *time.Time
`json:"started_at"`
- Status string
`json:"status"`
- }
- } `graphql:"steps(first: 50)"`
- }
+ Nodes []GraphqlQueryCheckRun
} `graphql:"checkRuns(first: $pageSize, after: $skipCursor)"`
} `graphql:"... on CheckSuite"`
}
+type GraphqlQueryCheckRun struct {
+ Id string
+ Name string
+ DetailsUrl string
+ DatabaseId int
+ Status string
+ StartedAt *time.Time
+ Conclusion string
+ CompletedAt *time.Time
+ //ExternalId string
+ //Url string
+ //Title interface{}
+ //Text interface{}
+ //Summary interface{}
+
+ Steps struct {
+ TotalCount int
+ Nodes []struct {
+ CompletedAt *time.Time `json:"completed_at"`
+ Conclusion string `json:"conclusion"`
+ Name string `json:"name"`
+ Number int `json:"number"`
+ SecondsToCompletion int
`json:"seconds_to_completion"`
+ StartedAt *time.Time `json:"started_at"`
+ Status string `json:"status"`
+ }
+ } `graphql:"steps(first: 50)"`
+}
+
type SimpleWorkflowRun struct {
CheckSuiteNodeID string
}
diff --git a/backend/plugins/github_graphql/tasks/job_extractor.go
b/backend/plugins/github_graphql/tasks/job_extractor.go
index 1bd035a7e..5d732eccd 100644
--- a/backend/plugins/github_graphql/tasks/job_extractor.go
+++ b/backend/plugins/github_graphql/tasks/job_extractor.go
@@ -51,50 +51,42 @@ func ExtractJobs(taskCtx plugin.SubTaskContext)
errors.Error {
Table: RAW_GRAPHQL_JOBS_TABLE,
},
Extract: func(row *api.RawData) ([]interface{}, errors.Error) {
- checkSuite := &GraphqlQueryCheckSuite{}
- err := errors.Convert(json.Unmarshal(row.Data,
checkSuite))
+ checkRun := &GraphqlQueryCheckRun{}
+ err := errors.Convert(json.Unmarshal(row.Data,
checkRun))
if err != nil {
return nil, err
}
results := make([]interface{}, 0, 1)
- for _, checkRun := range
checkSuite.CheckSuite.CheckRuns.Nodes {
- paramsBytes, err :=
json.Marshal(checkRun.Steps.Nodes)
- if err != nil {
- taskCtx.GetLogger().Error(err, `Marshal
checkRun.Steps.Nodes fail and ignore`)
- }
- githubJob := &models.GithubJob{
- ConnectionId: data.Options.ConnectionId,
- RunID:
checkSuite.CheckSuite.WorkflowRun.DatabaseId,
- RepoId: data.Options.GithubId,
- ID: checkRun.DatabaseId,
- NodeID: checkRun.Id,
- HTMLURL: checkRun.DetailsUrl,
- Status:
strings.ToUpper(checkRun.Status),
- Conclusion:
strings.ToUpper(checkRun.Conclusion),
- StartedAt: checkRun.StartedAt,
- CompletedAt: checkRun.CompletedAt,
- Name: checkRun.Name,
- Steps: paramsBytes,
- Type:
data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, checkRun.Name),
- Environment:
data.RegexEnricher.ReturnNameIfOmittedOrMatched(devops.PRODUCTION,
checkRun.Name),
- // these columns can not fill by graphql
- //HeadSha: ``, // use
_tool_github_runs
- //RunURL: ``,
- //CheckRunURL: ``,
- //Labels: ``, // not in use
- //RunnerID: ``, // not in use
- //RunnerName: ``, // not in use
- //RunnerGroupID: ``, // not in use
- }
- results = append(results, githubJob)
+
+ paramsBytes, marshalError :=
json.Marshal(checkRun.Steps.Nodes)
+ err = errors.Convert(marshalError)
+ if err != nil {
+ taskCtx.GetLogger().Error(err, `Marshal
checkRun.Steps.Nodes failed`)
}
- return results, nil
+ githubJob := &models.GithubJob{
+ ConnectionId: data.Options.ConnectionId,
+ RunID: checkRun.DatabaseId,
+ RepoId: data.Options.GithubId,
+ ID: checkRun.DatabaseId,
+ NodeID: checkRun.Id,
+ HTMLURL: checkRun.DetailsUrl,
+ Status: strings.ToUpper(checkRun.Status),
+ Conclusion:
strings.ToUpper(checkRun.Conclusion),
+ StartedAt: checkRun.StartedAt,
+ CompletedAt: checkRun.CompletedAt,
+ Name: checkRun.Name,
+ Steps: paramsBytes,
+ Type:
data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, checkRun.Name),
+ Environment:
data.RegexEnricher.ReturnNameIfOmittedOrMatched(devops.PRODUCTION,
checkRun.Name),
+ }
+ results = append(results, githubJob)
+ return results, nil
},
})
if err != nil {
- return err
+ return errors.Convert(err)
}
return extractor.Execute()