in tools/issue-labeler/labeler/backfill.go [25:81]
func GetIssues(repository, since string) ([]*github.Issue, error) {
client := newGitHubClient()
owner, repo, err := splitRepository(repository)
if err != nil {
return nil, fmt.Errorf("invalid repository format: %w", err)
}
sinceTime, err := time.Parse("2006-01-02", since) // input format YYYY-MM-DD
if err != nil {
return nil, fmt.Errorf("invalid since time format: %w", err)
}
opt := &github.IssueListByRepoOptions{
Since: sinceTime,
State: "all",
Sort: "updated",
Direction: "desc",
ListOptions: github.ListOptions{
PerPage: 100,
},
}
var allIssues []*github.Issue
ctx := context.Background()
issues, resp, err := client.Issues.ListByRepo(ctx, owner, repo, opt)
if err != nil {
return nil, fmt.Errorf("listing issues: %w", err)
}
allIssues = append(allIssues, issues...)
for {
// use link headers instead of page parameter based pagination as
// it is not supported for large datasets
next := parseNextLink(resp.Response)
if next == "" {
break
}
req, err := client.NewRequest("GET", next, nil)
if err != nil {
return allIssues, err
}
req.Header.Set("Accept", "application/vnd.github.raw+json")
var issues []*github.Issue
resp, err = client.Do(ctx, req, &issues)
if err != nil {
return allIssues, err
}
allIssues = append(allIssues, issues...)
}
return allIssues, nil
}