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 GetBuild(client concourse.Client, jobName string, buildNameOrID string, pipelineName string) (atc.Build, error) { if pipelineName != "" && jobName == "" { log.Fatalln("job must be specified if pipeline is specified") } if pipelineName == "" && jobName != "" { log.Fatalln("pipeline must be specified if job is specified") } 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 { allBuilds, err := client.AllBuilds() if err != nil { return atc.Build{}, fmt.Errorf("failed to get builds %s", err) } for _, build := range allBuilds { if build.JobName == "" { return build, nil } } return atc.Build{}, errors.New("no builds match job") } }
func FetchTemplateData( pipelineName string, client concourse.Client, jobName string, page concourse.Page, ) (TemplateData, error) { pipeline, pipelineFound, err := client.Pipeline(pipelineName) if err != nil { return TemplateData{}, err } if !pipelineFound { return TemplateData{}, ErrConfigNotFound } job, jobFound, err := client.Job(pipelineName, jobName) if err != nil { return TemplateData{}, err } if !jobFound { return TemplateData{}, ErrJobConfigNotFound } bs, pagination, _, err := client.JobBuilds(pipelineName, jobName, page) if err != nil { return TemplateData{}, err } var bsr []BuildWithInputsOutputs for _, build := range bs { buildInputsOutputs, _, err := client.BuildResources(build.ID) if err != nil { return TemplateData{}, err } bsr = append(bsr, BuildWithInputsOutputs{ Build: build, Resources: buildInputsOutputs, }) } return TemplateData{ PipelineName: pipelineName, Job: job, Builds: bsr, Pagination: pagination, GroupStates: group.States(pipeline.Groups, func(g atc.GroupConfig) bool { for _, groupJob := range g.Jobs { if groupJob == job.Name { return true } } return false }), CurrentBuild: job.FinishedBuild, }, nil }