@@ -50,17 +50,27 @@ const (
5050// handleFailedJobLogs gets logs for all failed jobs in a workflow run
5151func handleFailedJobLogs (ctx context.Context , client * github.Client , owner , repo string , runID int64 , returnContent bool , tailLines int , contentWindowSize int ) (* mcp.CallToolResult , * ActionsJobLogsOutput , error ) {
5252 // First, get all jobs for the workflow run
53- jobs , resp , err := client .Actions .ListWorkflowJobs (ctx , owner , repo , runID , & github.ListWorkflowJobsOptions {
54- Filter : "latest" ,
55- })
56- if err != nil {
57- return ghErrors .NewGitHubAPIErrorResponse (ctx , "failed to list workflow jobs" , resp , err ), nil , nil
53+ opts := & github.ListWorkflowJobsOptions {
54+ Filter : "latest" ,
55+ ListOptions : github.ListOptions {PerPage : 100 },
56+ }
57+ var allJobs []* github.WorkflowJob
58+ for {
59+ jobs , resp , err := client .Actions .ListWorkflowJobs (ctx , owner , repo , runID , opts )
60+ if err != nil {
61+ return ghErrors .NewGitHubAPIErrorResponse (ctx , "failed to list workflow jobs" , resp , err ), nil , nil
62+ }
63+ _ = resp .Body .Close ()
64+ allJobs = append (allJobs , jobs .Jobs ... )
65+ if resp .NextPage == 0 {
66+ break
67+ }
68+ opts .Page = resp .NextPage
5869 }
59- defer func () { _ = resp .Body .Close () }()
6070
6171 // Filter for failed jobs
6272 var failedJobs []* github.WorkflowJob
63- for _ , job := range jobs . Jobs {
73+ for _ , job := range allJobs {
6474 if job .GetConclusion () == "failure" {
6575 failedJobs = append (failedJobs , job )
6676 }
@@ -70,7 +80,7 @@ func handleFailedJobLogs(ctx context.Context, client *github.Client, owner, repo
7080 result := & ActionsFailedJobLogsOutput {
7181 Message : "No failed jobs found in this workflow run" ,
7282 RunID : runID ,
73- TotalJobs : len (jobs . Jobs ),
83+ TotalJobs : len (allJobs ),
7484 }
7585 r , _ := json .Marshal (result )
7686 return utils .NewToolResultText (string (r )), & ActionsJobLogsOutput {Failed : result }, nil
@@ -95,7 +105,7 @@ func handleFailedJobLogs(ctx context.Context, client *github.Client, owner, repo
95105 result := & ActionsFailedJobLogsOutput {
96106 Message : fmt .Sprintf ("Retrieved logs for %d failed jobs" , len (failedJobs )),
97107 RunID : runID ,
98- TotalJobs : len (jobs . Jobs ),
108+ TotalJobs : len (allJobs ),
99109 FailedJobs : len (failedJobs ),
100110 Logs : & logResults ,
101111 ReturnFormat : & ActionsLogsReturnFormat {Content : returnContent , URLs : ! returnContent },
0 commit comments