Skip to content

Add pagination support to GraphQL-based tools #683

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 28 commits into
base: main
Choose a base branch
from

Conversation

mattdholloway
Copy link

@mattdholloway mattdholloway commented Jul 15, 2025

This PR idiomatically implements pagination for GraphQL based tools using the spec described in https://docs.github.com/en/graphql/reference/objects#connection and based on the standard in https://graphql.org/learn/pagination/

Closes: https://github.com/github/copilot-agent-services/issues/296

@mattdholloway mattdholloway self-assigned this Jul 15, 2025
@mattdholloway mattdholloway changed the title initial pagination for ListDiscussions Add pagination support to GraphQL-based tools Jul 15, 2025
@mattdholloway
Copy link
Author

Pagination works for listing discussions but does not currently provide the caller with the details of which page it is on:

Screenshot 2025-07-15 at 16 45 33

@mattdholloway mattdholloway marked this pull request as ready for review July 16, 2025 09:29
@Copilot Copilot AI review requested due to automatic review settings July 16, 2025 09:29
@mattdholloway mattdholloway requested a review from a team as a code owner July 16, 2025 09:29
Copilot

This comment was marked as outdated.

@mattdholloway mattdholloway requested a review from Copilot July 16, 2025 14:59
Copilot

This comment was marked as outdated.

@mattdholloway
Copy link
Author

A downside of using cursor-based pagination in GraphQL is that there is no way of 'skipping' pages as the ID of the final entry of the previously - I am investigating falling back to the REST api if the user needs this functionality.

@mattdholloway mattdholloway requested a review from Copilot July 17, 2025 14:41
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements pagination support for GraphQL-based tools to provide consistent pagination capabilities across both REST and GraphQL APIs. The changes introduce a unified pagination approach that accepts traditional page/perPage parameters while providing GraphQL cursor-based pagination support through the after parameter.

Key changes include:

  • Introduction of WithUnifiedPagination() function that adds page, perPage, and after parameters to GraphQL tools
  • Conversion of private pagination struct fields to public fields (Page, PerPage, After)
  • Addition of ToGraphQLParams() method to convert REST-style pagination to GraphQL parameters
  • Update of GraphQL discussion tools to return structured responses with pagination metadata

Reviewed Changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
pkg/github/server.go Adds unified pagination support and GraphQL parameter conversion
pkg/github/discussions.go Implements pagination for all discussion-related GraphQL tools
pkg/github/discussions_test.go Updates tests to handle new pagination response structure
pkg/github/server_test.go Updates pagination tests for public struct fields
Multiple REST API files Updates field references from private to public pagination fields
README.md Documents new pagination parameters for discussion tools

mattdholloway and others added 5 commits July 17, 2025 15:43
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@mattdholloway mattdholloway requested a review from omgitsads July 18, 2025 11:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant