in cmd/testmatrix/main.go [193:247]
func handleTrigger(
ctx context.Context,
projectId string,
trigger *cloudbuild.BuildTrigger,
cloudbuildService *cloudbuild.Service,
storageClient *storage.Client,
) (*result, error) {
if !triggerNameRe.MatchString(trigger.Name) {
log.Printf("Skipping trigger %v which doesn't match regex", trigger.Name)
return nil, nil
}
res := &result{
RepoName: trigger.Github.Name,
Platform: trigger.Tags[1],
Statuses: make(map[string]status),
}
// fetch the latest successful build
listRes, err := cloudbuildService.Projects.Builds.List(projectId).
Context(ctx).
Filter(fmt.Sprintf(`trigger_id="%v" AND status="SUCCESS"`, trigger.Id)).
PageSize(1).
Do()
if err != nil {
return nil, err
}
if len(listRes.Builds) == 0 {
log.Printf("trigger %v had no successful builds, skipping the trigger", trigger.Name)
return res, nil
}
build := listRes.Builds[0]
reader, err := storageClient.Bucket(strings.TrimPrefix(build.LogsBucket, "gs://")).
Object(fmt.Sprintf("log-%v.txt", build.Id)).
NewReader(ctx)
if err != nil {
return nil, err
}
defer reader.Close()
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
line := scanner.Text()
if passMatches := scenarioPassRe.FindStringSubmatch(line); passMatches != nil {
res.Statuses[passMatches[1]] = pass
} else if skipMatches := scenarioSkipRe.FindStringSubmatch(line); skipMatches != nil {
res.Statuses[skipMatches[1]] = skip
}
}
if err := scanner.Err(); err != nil {
return nil, err
}
return res, nil
}