func GetBuild(client concourse.Client, jobName string, buildNameOrID string, pipelineName string) (atc.Build, error) { if buildNameOrID != "" { var build atc.Build var err error var found bool if jobName != "" { build, found, err = client.JobBuild(pipelineName, jobName, buildNameOrID) } else { build, found, err = client.Build(buildNameOrID) } if err != nil { return atc.Build{}, fmt.Errorf("failed to get build %s", err) } if !found { return atc.Build{}, errors.New("build not found") } return build, nil } else if jobName != "" { job, found, err := client.Job(pipelineName, jobName) if err != nil { return atc.Build{}, fmt.Errorf("failed to get job %s", err) } if !found { return atc.Build{}, errors.New("job not found") } if job.NextBuild != nil { return *job.NextBuild, nil } else if job.FinishedBuild != nil { return *job.FinishedBuild, nil } else { return atc.Build{}, errors.New("job has no builds") } } else { page := &concourse.Page{Limit: 100} for page != nil { allBuilds, pagination, err := client.Builds(*page) if err != nil { return atc.Build{}, fmt.Errorf("failed to get builds %s", err) } for _, build := range allBuilds { if build.JobName == "" { return build, nil } } page = pagination.Next } return atc.Build{}, errors.New("no builds match job") } }
func FetchTemplateData(client concourse.Client, page concourse.Page) (TemplateData, error) { builds, pagination, err := client.Builds(page) if err != nil { return TemplateData{}, err } return TemplateData{ Builds: PresentBuilds(builds), Pagination: pagination, }, nil }