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 }