github.com/chenbh/concourse/v6@v6.4.2/fly/commands/resource_versions.go (about)

     1  package commands
     2  
     3  import (
     4  	"os"
     5  	"sort"
     6  	"strconv"
     7  	"strings"
     8  
     9  	"github.com/chenbh/concourse/v6/atc"
    10  	"github.com/chenbh/concourse/v6/fly/commands/internal/displayhelpers"
    11  	"github.com/chenbh/concourse/v6/fly/commands/internal/flaghelpers"
    12  	"github.com/chenbh/concourse/v6/fly/rc"
    13  	"github.com/chenbh/concourse/v6/fly/ui"
    14  	"github.com/chenbh/concourse/v6/go-concourse/concourse"
    15  	"github.com/fatih/color"
    16  )
    17  
    18  type ResourceVersionsCommand struct {
    19  	Count    int                      `short:"c" long:"count" default:"50" description:"Number of versions you want to limit the return to"`
    20  	Resource flaghelpers.ResourceFlag `short:"r" long:"resource" required:"true" value-name:"PIPELINE/RESOURCE" description:"Name of a resource to get versions for"`
    21  	Json     bool                     `long:"json" description:"Print command result as JSON"`
    22  }
    23  
    24  func (command *ResourceVersionsCommand) Execute([]string) error {
    25  	target, err := rc.LoadTarget(Fly.Target, Fly.Verbose)
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	err = target.Validate()
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	page := concourse.Page{Limit: command.Count}
    36  
    37  	team := target.Team()
    38  
    39  	versions, _, _, err := team.ResourceVersions(command.Resource.PipelineName, command.Resource.ResourceName, page, atc.Version{})
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	if command.Json {
    45  		err = displayhelpers.JsonPrint(versions)
    46  		if err != nil {
    47  			return err
    48  		}
    49  		return nil
    50  	}
    51  
    52  	table := ui.Table{
    53  		Headers: ui.TableRow{
    54  			{Contents: "id", Color: color.New(color.Bold)},
    55  			{Contents: "version", Color: color.New(color.Bold)},
    56  			{Contents: "enabled", Color: color.New(color.Bold)},
    57  		},
    58  	}
    59  
    60  	var rangeUntil int
    61  	if command.Count < len(versions) {
    62  		rangeUntil = command.Count
    63  	} else {
    64  		rangeUntil = len(versions)
    65  	}
    66  
    67  	for _, version := range versions[:rangeUntil] {
    68  		var enabledCell ui.TableCell
    69  		if version.Enabled {
    70  			enabledCell.Color = ui.OnColor
    71  			enabledCell.Contents = "yes"
    72  		} else {
    73  			enabledCell.Contents = "no"
    74  		}
    75  
    76  		fields := []string{}
    77  		for k, v := range version.Version {
    78  			fields = append(fields, k+":"+v)
    79  		}
    80  
    81  		sort.Strings(fields)
    82  
    83  		table.Data = append(table.Data, []ui.TableCell{
    84  			{Contents: strconv.Itoa(version.ID)},
    85  			{Contents: strings.Join(fields, ",")},
    86  			enabledCell,
    87  		})
    88  	}
    89  
    90  	return table.Render(os.Stdout, Fly.PrintTableHeaders)
    91  }