From 9876c28353c1fd214c50e12d7474adeb43385028 Mon Sep 17 00:00:00 2001 From: nikhilsbhat Date: Sun, 10 Sep 2023 22:17:26 +0530 Subject: [PATCH] Update gocd sdk to use the internal API for fetching material information --- cmd/flags.go | 6 +++++- cmd/materials.go | 52 +++++++++++++++++++++++++++++++++++++++++++++--- go.mod | 8 ++++---- go.sum | 16 +++++++-------- 4 files changed, 66 insertions(+), 16 deletions(-) diff --git a/cmd/flags.go b/cmd/flags.go index 1250cfe..baa2a43 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -122,8 +122,12 @@ func registerRawFlags(cmd *cobra.Command) { } func registerMaterialFlags(cmd *cobra.Command) { - cmd.PersistentFlags().StringSliceVarP(&materialFilter, "filter", "", nil, + cmd.PersistentFlags().StringSliceVarP(&materialFilters, "filter", "", nil, + "filter to be applied on all available materials in GoCD, filter can be applied as key=value (ex: --filter type=git)") + cmd.PersistentFlags().StringSliceVarP(&materialName, "names", "", nil, "name of the material to filter from the available material in GoCD") + cmd.PersistentFlags().BoolVarP(&materialFailed, "failed", "", false, + "if enabled, only the failed material would be retrieved") } func registerPipelineHistoryFlags(cmd *cobra.Command) { diff --git a/cmd/materials.go b/cmd/materials.go index 33b4669..14baa96 100644 --- a/cmd/materials.go +++ b/cmd/materials.go @@ -1,13 +1,20 @@ package cmd import ( + "strconv" + "strings" + "github.com/nikhilsbhat/gocd-cli/pkg/render" "github.com/nikhilsbhat/gocd-sdk-go" "github.com/spf13/cobra" "github.com/thoas/go-funk" ) -var materialFilter []string +var ( + materialName []string + materialFilters []string + materialFailed bool +) func registerMaterialsCommand() *cobra.Command { registerAgentProfilesCmd := &cobra.Command{ @@ -49,12 +56,51 @@ func getMaterialsCommand() *cobra.Command { return err } - if len(materialFilter) != 0 { + if materialFailed { + response = funk.Filter(response, func(material gocd.Material) bool { + return len(material.Messages) != 0 + }).([]gocd.Material) + } + + if len(materialName) != 0 { response = funk.Filter(response, func(material gocd.Material) bool { - return funk.Contains(materialFilter, material.Attributes.Name) + return funk.Contains(materialName, material.Config.Attributes.URL) }).([]gocd.Material) } + if len(materialFilters) != 0 { + for _, materialFilter := range materialFilters { + filter := strings.Split(materialFilter, "=") + + response = funk.Filter(response, func(material gocd.Material) bool { + switch strings.ToLower(filter[0]) { + case "url": + if funk.Contains(material.Config.Attributes.URL, filter[1]) { + return true + } + + return false + case "type": + if funk.Contains(material.Config.Type, filter[1]) { + return true + } + + return false + case "can_update": + boolValue, _ := strconv.ParseBool(strings.ToLower(filter[1])) + + return material.CanTriggerUpdate == boolValue + case "auto_update": + boolValue, _ := strconv.ParseBool(strings.ToLower(filter[1])) + + return material.Config.Attributes.AutoUpdate == boolValue + } + + return false + }).([]gocd.Material) + } + } + if len(jsonQuery) != 0 { cliLogger.Debugf(queryEnabledMessage, jsonQuery) diff --git a/go.mod b/go.mod index 0de373f..b39a871 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/ghodss/yaml v1.0.0 - github.com/nikhilsbhat/gocd-sdk-go v0.1.8-0.20230810120458-385cbf32bfe1 + github.com/nikhilsbhat/gocd-sdk-go v0.1.8-0.20230910045853-22e6b48abf5e github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.6.1 github.com/stretchr/testify v1.8.2 @@ -18,13 +18,13 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-resty/resty/v2 v2.7.0 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect - github.com/jinzhu/copier v0.3.5 // indirect + github.com/jinzhu/copier v0.4.0 // indirect github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/sys v0.11.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/sys v0.12.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index ec63e93..6887c5d 100644 --- a/go.sum +++ b/go.sum @@ -11,13 +11,13 @@ github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSM github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= -github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= +github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/nikhilsbhat/gocd-sdk-go v0.1.8-0.20230810120458-385cbf32bfe1 h1:74wWSQC5aAq1XYoCYUxBX5NJlPyu0NTVGF7uSkvmu0o= -github.com/nikhilsbhat/gocd-sdk-go v0.1.8-0.20230810120458-385cbf32bfe1/go.mod h1:bIE3Xr7rRzOo0xSX/oa13kXNdFTgCR3JtCh/SontbwM= +github.com/nikhilsbhat/gocd-sdk-go v0.1.8-0.20230910045853-22e6b48abf5e h1:svRozwq8SuPpoR8K9h4rxImXRhJ9iLBpk9S+ilT6LEM= +github.com/nikhilsbhat/gocd-sdk-go v0.1.8-0.20230910045853-22e6b48abf5e/go.mod h1:bIE3Xr7rRzOo0xSX/oa13kXNdFTgCR3JtCh/SontbwM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -45,13 +45,13 @@ github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33 github.com/thoas/go-funk v0.9.3 h1:7+nAEx3kn5ZJcnDm2Bh23N2yOtweO14bi//dvRtgLpw= github.com/thoas/go-funk v0.9.3/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=