infra/utils/fbf/cmd/cb.go (54 lines of code) (raw):
package cmd
import (
"context"
"fmt"
"time"
cloudbuild "google.golang.org/api/cloudbuild/v1"
)
const (
successStatus = "SUCCESS"
failedStatus = "FAILURE"
)
// getCBBuildsWithFilter returns a list of cloudbuild builds in projectID within start and end time
func getCBBuildsWithFilter(start, end time.Time, projectID string) ([]*build, error) {
ctx := context.Background()
cloudbuildService, err := cloudbuild.NewService(ctx)
if err != nil {
return nil, fmt.Errorf("error creating cloudbuild service: %v", err)
}
filter := fmt.Sprintf("create_time>=\"%s\" AND create_time<\"%s\"", formatTimeCB(start), formatTimeCB(end))
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: %v", filter, projectID, err)
}
cbBuilds := c.Builds
if len(cbBuilds) < 1 {
return nil, fmt.Errorf("no builds found with filter %s in project %s", filter, projectID)
}
for {
c, err = cloudbuildService.Projects.Builds.List(projectID).Filter(filter).PageToken(c.NextPageToken).Do()
if err != nil {
return nil, fmt.Errorf("error retriving next page with token %s: %v", c.NextPageToken, err)
}
cbBuilds = append(cbBuilds, c.Builds...)
if c.NextPageToken == "" {
break
}
}
builds := []*build{}
for _, b := range cbBuilds {
// filter out builds not triggered from source repos
commit, commitExists := b.Substitutions["COMMIT_SHA"]
if !commitExists {
continue
}
repoName, repoNameExists := b.Substitutions["REPO_NAME"]
if !repoNameExists {
continue
}
triggerName, triggerNameExists := b.Substitutions["TRIGGER_NAME"]
if !triggerNameExists {
continue
}
builds = append(builds, &build{commitSHA: commit, repoName: repoName, jobName: triggerName, id: b.Id, status: b.Status})
}
return builds, nil
}