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  }