in cli/bpbuild/build.go [21:67]
func getCBBuildsWithFilter(projectID string, filter string, cFilters []clientBuildFilter) ([]*cloudbuild.Build, error) {
ctx := context.Background()
cloudbuildService, err := cloudbuild.NewService(ctx)
if err != nil {
return nil, fmt.Errorf("error creating cloudbuild service: %w", err)
}
c, err := cloudbuildService.Projects.Builds.List(projectID).Filter(filter).Do()
if err != nil {
return nil, fmt.Errorf("error listing builds with filter %s in project %s: %w", filter, projectID, err)
}
cbBuilds := []*cloudbuild.Build{}
appendClientFilteredBuilds := func(builds []*cloudbuild.Build) {
for _, b := range builds {
appendBuild := true
for _, cFilter := range cFilters {
// skip if any client side filter evaluates to false
if !cFilter(b) {
appendBuild = false
break
}
}
if appendBuild {
cbBuilds = append(cbBuilds, b)
}
}
}
if len(c.Builds) < 1 {
return nil, fmt.Errorf("no builds found with filter %s in project %s", filter, projectID)
}
appendClientFilteredBuilds(c.Builds)
// pagination
for {
c, err = cloudbuildService.Projects.Builds.List(projectID).Filter(filter).PageToken(c.NextPageToken).Do()
if err != nil {
return nil, fmt.Errorf("error retrieving next page with token %s: %w", c.NextPageToken, err)
}
appendClientFilteredBuilds(c.Builds)
if c.NextPageToken == "" {
break
}
}
return cbBuilds, nil
}