@@ -189,36 +189,54 @@ type CodespaceEnvironmentConnection struct {
189189
190190// ListCodespaces returns a list of codespaces for the user.
191191func (a * API ) ListCodespaces (ctx context.Context ) ([]* Codespace , error ) {
192- req , err := http .NewRequest (
193- http .MethodGet , a .githubAPI + "/user/codespaces" , nil ,
194- )
195- if err != nil {
196- return nil , fmt .Errorf ("error creating request: %w" , err )
197- }
192+ page := 1
193+ per_page := 50
194+ codespaces := []* Codespace {}
198195
199- a .setHeaders (req )
200- resp , err := a .do (ctx , req , "/user/codespaces" )
201- if err != nil {
202- return nil , fmt .Errorf ("error making request: %w" , err )
203- }
204- defer resp .Body .Close ()
196+ for {
197+ req , err := http .NewRequest (
198+ http .MethodGet , a .githubAPI + "/user/codespaces" , nil ,
199+ )
200+ if err != nil {
201+ return nil , fmt .Errorf ("error creating request: %w" , err )
202+ }
203+ a .setHeaders (req )
204+ q := req .URL .Query ()
205+ q .Add ("page" , strconv .Itoa (page ))
206+ q .Add ("per_page" , strconv .Itoa (per_page ))
205207
206- b , err := ioutil .ReadAll (resp .Body )
207- if err != nil {
208- return nil , fmt .Errorf ("error reading response body: %w" , err )
209- }
208+ req .URL .RawQuery = q .Encode ()
209+ resp , err := a .do (ctx , req , "/user/codespaces" )
210+ if err != nil {
211+ return nil , fmt .Errorf ("error making request: %w" , err )
212+ }
213+ defer resp .Body .Close ()
210214
211- if resp .StatusCode != http .StatusOK {
212- return nil , jsonErrorResponse (b )
213- }
215+ b , err := ioutil .ReadAll (resp .Body )
216+ if err != nil {
217+ return nil , fmt .Errorf ("error reading response body: %w" , err )
218+ }
214219
215- var response struct {
216- Codespaces []* Codespace `json:"codespaces"`
217- }
218- if err := json .Unmarshal (b , & response ); err != nil {
219- return nil , fmt .Errorf ("error unmarshaling response: %w" , err )
220+ if resp .StatusCode != http .StatusOK {
221+ return nil , jsonErrorResponse (b )
222+ }
223+
224+ var response struct {
225+ Codespaces []* Codespace `json:"codespaces"`
226+ }
227+ if err := json .Unmarshal (b , & response ); err != nil {
228+ return nil , fmt .Errorf ("error unmarshaling response: %w" , err )
229+ }
230+
231+ if len (response .Codespaces ) > 0 {
232+ codespaces = append (codespaces , response .Codespaces ... )
233+ page ++
234+ } else {
235+ break
236+ }
220237 }
221- return response .Codespaces , nil
238+
239+ return codespaces , nil
222240}
223241
224242// getCodespaceTokenRequest is the request body for the get codespace token endpoint.
0 commit comments