github.com/chenbh/concourse/v6@v6.4.2/fly/commands/helpers.go (about) 1 package commands 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 8 "github.com/chenbh/concourse/v6/atc" 9 "github.com/chenbh/concourse/v6/fly/commands/internal/flaghelpers" 10 "github.com/chenbh/concourse/v6/fly/rc" 11 "github.com/chenbh/concourse/v6/go-concourse/concourse" 12 ) 13 14 func GetBuild(client concourse.Client, team concourse.Team, jobName string, buildNameOrID string, pipelineName string) (atc.Build, error) { 15 if buildNameOrID != "" { 16 var build atc.Build 17 var err error 18 var found bool 19 20 if team != nil { 21 build, found, err = team.JobBuild(pipelineName, jobName, buildNameOrID) 22 } else { 23 build, found, err = client.Build(buildNameOrID) 24 } 25 26 if err != nil { 27 return atc.Build{}, fmt.Errorf("failed to get build %s", err) 28 } 29 30 if !found { 31 return atc.Build{}, errors.New("build not found") 32 } 33 34 return build, nil 35 } else if jobName != "" { 36 job, found, err := team.Job(pipelineName, jobName) 37 38 if err != nil { 39 return atc.Build{}, fmt.Errorf("failed to get job %s", err) 40 } 41 42 if !found { 43 return atc.Build{}, errors.New("job not found") 44 } 45 46 if job.NextBuild != nil { 47 return *job.NextBuild, nil 48 } else if job.FinishedBuild != nil { 49 return *job.FinishedBuild, nil 50 } else { 51 return atc.Build{}, errors.New("job has no builds") 52 } 53 } else { 54 page := &concourse.Page{Limit: 100} 55 56 for page != nil { 57 allBuilds, pagination, err := client.Builds(*page) 58 if err != nil { 59 return atc.Build{}, fmt.Errorf("failed to get builds %s", err) 60 } 61 62 for _, build := range allBuilds { 63 if build.JobName == "" { 64 return build, nil 65 } 66 } 67 68 page = pagination.Next 69 } 70 71 return atc.Build{}, errors.New("no builds match job") 72 } 73 } 74 75 func GetLatestResourceVersion(team concourse.Team, resource flaghelpers.ResourceFlag, version atc.Version) (atc.ResourceVersion, error) { 76 versions, _, found, err := team.ResourceVersions(resource.PipelineName, resource.ResourceName, concourse.Page{}, version) 77 78 if err != nil { 79 return atc.ResourceVersion{}, err 80 } 81 82 if !found || len(versions) <= 0 { 83 versionBytes, err := json.Marshal(version) 84 if err != nil { 85 return atc.ResourceVersion{}, err 86 } 87 88 return atc.ResourceVersion{}, errors.New(fmt.Sprintf("could not find version matching %s", string(versionBytes))) 89 } 90 91 return versions[0], nil 92 } 93 94 func GetTeam(target rc.Target, teamToFind string) concourse.Team { 95 if teamToFind != "" { 96 return target.Client().Team(teamToFind) 97 } 98 return target.Team() 99 }