diff --git a/cmd/cli-docs/main.go b/cmd/cli-docs/main.go index 81f55b87e..ebc60c94c 100644 --- a/cmd/cli-docs/main.go +++ b/cmd/cli-docs/main.go @@ -1,10 +1,10 @@ package main import ( + "github.com/tektoncd/results/pkg/cli/cmd" "log" "github.com/spf13/cobra/doc" - "github.com/tektoncd/results/pkg/cli/cmd" ) func main() { diff --git a/cmd/tkn-results/main.go b/cmd/tkn-results/main.go index 1d3b69157..4eb7ed1c1 100644 --- a/cmd/tkn-results/main.go +++ b/cmd/tkn-results/main.go @@ -2,9 +2,8 @@ package main import ( "context" - "os" - "github.com/tektoncd/results/pkg/cli/cmd" + "os" ) func main() { diff --git a/pkg/cli/cmd/root.go b/pkg/cli/cmd/root.go index 0c57bd0ec..0d9519303 100644 --- a/pkg/cli/cmd/root.go +++ b/pkg/cli/cmd/root.go @@ -4,17 +4,17 @@ import ( _ "embed" "flag" "fmt" + "github.com/tektoncd/results/pkg/cli/dev/client" + "github.com/tektoncd/results/pkg/cli/dev/cmd" + "github.com/tektoncd/results/pkg/cli/dev/cmd/logs" + "github.com/tektoncd/results/pkg/cli/dev/cmd/records" + "github.com/tektoncd/results/pkg/cli/dev/config" + "github.com/tektoncd/results/pkg/cli/dev/flags" + "github.com/tektoncd/results/pkg/cli/dev/portforward" "github.com/spf13/cobra" "github.com/spf13/pflag" "github.com/spf13/viper" - "github.com/tektoncd/results/pkg/cli/client" - "github.com/tektoncd/results/pkg/cli/cmd/logs" - "github.com/tektoncd/results/pkg/cli/cmd/records" - "github.com/tektoncd/results/pkg/cli/config" - "github.com/tektoncd/results/pkg/cli/flags" - "github.com/tektoncd/results/pkg/cli/portforward" - // TODO: Dynamically discover other protos to allow custom record printing. _ "github.com/tektoncd/results/proto/pipeline/v1/pipeline_go_proto" ) @@ -28,56 +28,13 @@ var ( func Root() *cobra.Command { params := &flags.Params{} var portForwardCloseChan chan struct{} - cmd := &cobra.Command{ + c := &cobra.Command{ Use: "tkn-results", Short: "tkn CLI plugin for Tekton Results API", Long: help, - PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { - var overrideAPIAdr string - - // Prepare to port-forward if addr config is not set - if cfg := config.GetConfig(); cfg.Portforward && cfg.Address == "" { - portForward, err := portforward.NewPortForward() - if err != nil { - return err - } - // Pick a usable port on localhost for port-forwarding - port, err := portforward.PickFreePort() - if err != nil { - return err - } - overrideAPIAdr = fmt.Sprintf("localhost:%d", port) - portForwardCloseChan = make(chan struct{}) - if err = portForward.ForwardPortBackground(portForwardCloseChan, port); err != nil { - return err - } - } - - apiClient, err := client.DefaultResultsClient(cmd.Context(), overrideAPIAdr) - - if err != nil { - return err - } - - params.ResultsClient = apiClient - - logClient, err := client.DefaultLogsClient(cmd.Context(), overrideAPIAdr) - - if err != nil { - return err - } - - params.LogsClient = logClient - - pluginLogsClient, err := client.DefaultPluginLogsClient(cmd.Context(), overrideAPIAdr) - - if err != nil { - return err - } - - params.PluginLogsClient = pluginLogsClient - - return nil + PersistentPreRunE: func(c *cobra.Command, _ []string) error { + // this will only run when older commands is being used + return persistentPreRunHandler(c, params, &portForwardCloseChan) }, PersistentPostRun: func(_ *cobra.Command, _ []string) { if portForwardCloseChan != nil { @@ -89,23 +46,66 @@ func Root() *cobra.Command { }, } - cmd.PersistentFlags().StringP("addr", "a", "", "Result API server address. If not specified, tkn-result would port-forward to service/tekton-results-api-service automatically") - cmd.PersistentFlags().StringP("authtoken", "t", "", "authorization bearer token to use for authenticated requests") - cmd.PersistentFlags().String("sa", "", "ServiceAccount to use instead of token for authorization and authentication") - cmd.PersistentFlags().String("sa-ns", "", "ServiceAccount Namespace, if not given, it will be taken from current context") - cmd.PersistentFlags().Bool("portforward", true, "enable auto portforwarding to tekton-results-api-service, when addr is set and portforward is true, tkn-results will portforward tekton-results-api-service automatically") - cmd.PersistentFlags().Bool("insecure", false, "determines whether to run insecure GRPC tls request") - cmd.PersistentFlags().Bool("v1alpha2", false, "use v1alpha2 API for get log command") + c.PersistentFlags().StringP("addr", "a", "", "Result API server address. If not specified, tkn-result would port-forward to service/tekton-results-api-service automatically") + c.PersistentFlags().StringP("authtoken", "t", "", "authorization bearer token to use for authenticated requests") + c.PersistentFlags().String("sa", "", "ServiceAccount to use instead of token for authorization and authentication") + c.PersistentFlags().String("sa-ns", "", "ServiceAccount Namespace, if not given, it will be taken from current context") + c.PersistentFlags().Bool("portforward", true, "enable auto portforwarding to tekton-results-api-service, when addr is set and portforward is true, tkn-results will portforward tekton-results-api-service automatically") + c.PersistentFlags().Bool("insecure", false, "determines whether to run insecure GRPC tls request") + c.PersistentFlags().Bool("v1alpha2", false, "use v1alpha2 API for get log command") - cmd.AddCommand(ListCommand(params), records.Command(params), logs.Command(params)) + c.AddCommand(cmd.ListCommand(params), records.Command(params), logs.Command(params)) pflag.CommandLine.AddGoFlagSet(flag.CommandLine) - err := viper.BindPFlags(cmd.PersistentFlags()) + err := viper.BindPFlags(c.PersistentFlags()) if err != nil { return nil } cobra.OnInitialize(config.Init) - return cmd + return c +} + +func persistentPreRunHandler(c *cobra.Command, params *flags.Params, portForwardCloseChan *chan struct{}) error { + var overrideAPIAdr string + + // Prepare to port-forward if addr config is not set + if cfg := config.GetConfig(); cfg.Portforward && cfg.Address == "" { + portForward, err := portforward.NewPortForward() + if err != nil { + return err + } + // Pick a usable port on localhost for port-forwarding + port, err := portforward.PickFreePort() + if err != nil { + return err + } + overrideAPIAdr = fmt.Sprintf("localhost:%d", port) + *portForwardCloseChan = make(chan struct{}) + if err = portForward.ForwardPortBackground(*portForwardCloseChan, port); err != nil { + return err + } + } + + // Initialize API clients + apiClient, err := client.DefaultResultsClient(c.Context(), overrideAPIAdr) + if err != nil { + return err + } + params.ResultsClient = apiClient + + logClient, err := client.DefaultLogsClient(c.Context(), overrideAPIAdr) + if err != nil { + return err + } + params.LogsClient = logClient + + pluginLogsClient, err := client.DefaultPluginLogsClient(c.Context(), overrideAPIAdr) + if err != nil { + return err + } + params.PluginLogsClient = pluginLogsClient + + return nil } diff --git a/pkg/cli/cmd/root_test.go b/pkg/cli/cmd/root_test.go index 9833e6936..97b32377c 100644 --- a/pkg/cli/cmd/root_test.go +++ b/pkg/cli/cmd/root_test.go @@ -4,12 +4,12 @@ import ( "bufio" "bytes" "fmt" + "github.com/tektoncd/results/pkg/cli/dev/format" "strings" "testing" "time" "github.com/google/go-cmp/cmp" - "github.com/tektoncd/results/pkg/cli/format" pb "github.com/tektoncd/results/proto/v1alpha2/results_go_proto" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/encoding/prototext" diff --git a/pkg/cli/client/client.go b/pkg/cli/dev/client/client.go similarity index 99% rename from pkg/cli/client/client.go rename to pkg/cli/dev/client/client.go index 6eb8163f5..57bb9c2bf 100644 --- a/pkg/cli/client/client.go +++ b/pkg/cli/dev/client/client.go @@ -5,11 +5,11 @@ import ( "crypto/tls" "crypto/x509" "fmt" + "github.com/tektoncd/results/pkg/cli/dev/config" "io" "os" "time" - "github.com/tektoncd/results/pkg/cli/config" pb "github.com/tektoncd/results/proto/v1alpha2/results_go_proto" pb3 "github.com/tektoncd/results/proto/v1alpha3/results_go_proto" "golang.org/x/oauth2" diff --git a/pkg/cli/client/client_test.go b/pkg/cli/dev/client/client_test.go similarity index 98% rename from pkg/cli/client/client_test.go rename to pkg/cli/dev/client/client_test.go index 370390ed0..ee2ed3fa5 100644 --- a/pkg/cli/client/client_test.go +++ b/pkg/cli/dev/client/client_test.go @@ -5,11 +5,11 @@ import ( "crypto/ed25519" "crypto/x509" "encoding/pem" + "github.com/tektoncd/results/pkg/cli/dev/config" "math/big" "os" "testing" - "github.com/tektoncd/results/pkg/cli/config" v1 "k8s.io/api/authentication/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/fake" diff --git a/pkg/cli/cmd/list.go b/pkg/cli/dev/cmd/list.go similarity index 91% rename from pkg/cli/cmd/list.go rename to pkg/cli/dev/cmd/list.go index ea9083d76..5e3c128e2 100644 --- a/pkg/cli/cmd/list.go +++ b/pkg/cli/dev/cmd/list.go @@ -2,11 +2,11 @@ package cmd import ( "fmt" + "github.com/tektoncd/results/pkg/cli/dev/flags" + "github.com/tektoncd/results/pkg/cli/dev/format" "os" "github.com/spf13/cobra" - "github.com/tektoncd/results/pkg/cli/flags" - "github.com/tektoncd/results/pkg/cli/format" pb "github.com/tektoncd/results/proto/v1alpha2/results_go_proto" ) diff --git a/pkg/cli/cmd/logs/get.go b/pkg/cli/dev/cmd/logs/get.go similarity index 95% rename from pkg/cli/cmd/logs/get.go rename to pkg/cli/dev/cmd/logs/get.go index 9d478e8e4..af9c217dc 100644 --- a/pkg/cli/cmd/logs/get.go +++ b/pkg/cli/dev/cmd/logs/get.go @@ -16,6 +16,9 @@ package logs import ( "fmt" + "github.com/tektoncd/results/pkg/cli/dev/config" + "github.com/tektoncd/results/pkg/cli/dev/flags" + "github.com/tektoncd/results/pkg/cli/dev/format" "os" "strings" @@ -26,9 +29,6 @@ import ( "github.com/tektoncd/results/pkg/api/server/v1alpha2/log" "github.com/tektoncd/results/pkg/api/server/v1alpha2/record" "github.com/tektoncd/results/pkg/api/server/v1alpha2/result" - "github.com/tektoncd/results/pkg/cli/config" - "github.com/tektoncd/results/pkg/cli/flags" - "github.com/tektoncd/results/pkg/cli/format" pb "github.com/tektoncd/results/proto/v1alpha2/results_go_proto" pb3 "github.com/tektoncd/results/proto/v1alpha3/results_go_proto" ) diff --git a/pkg/cli/cmd/logs/list.go b/pkg/cli/dev/cmd/logs/list.go similarity index 95% rename from pkg/cli/cmd/logs/list.go rename to pkg/cli/dev/cmd/logs/list.go index 2a569ad33..32bba8a35 100644 --- a/pkg/cli/cmd/logs/list.go +++ b/pkg/cli/dev/cmd/logs/list.go @@ -16,11 +16,11 @@ package logs import ( "fmt" + "github.com/tektoncd/results/pkg/cli/dev/flags" + "github.com/tektoncd/results/pkg/cli/dev/format" "os" "github.com/spf13/cobra" - "github.com/tektoncd/results/pkg/cli/flags" - "github.com/tektoncd/results/pkg/cli/format" pb "github.com/tektoncd/results/proto/v1alpha2/results_go_proto" ) diff --git a/pkg/cli/cmd/logs/logs.go b/pkg/cli/dev/cmd/logs/logs.go similarity index 95% rename from pkg/cli/cmd/logs/logs.go rename to pkg/cli/dev/cmd/logs/logs.go index 9dbb704fe..fb683d3f9 100644 --- a/pkg/cli/cmd/logs/logs.go +++ b/pkg/cli/dev/cmd/logs/logs.go @@ -16,7 +16,7 @@ package logs import ( "github.com/spf13/cobra" - "github.com/tektoncd/results/pkg/cli/flags" + "github.com/tektoncd/results/pkg/cli/dev/flags" ) // Command returns a cobra command for `logs` sub commands diff --git a/pkg/cli/cmd/records/get.go b/pkg/cli/dev/cmd/records/get.go similarity index 95% rename from pkg/cli/cmd/records/get.go rename to pkg/cli/dev/cmd/records/get.go index 6a1944b87..463c47f3f 100644 --- a/pkg/cli/cmd/records/get.go +++ b/pkg/cli/dev/cmd/records/get.go @@ -16,11 +16,11 @@ package records import ( "fmt" + "github.com/tektoncd/results/pkg/cli/dev/flags" + "github.com/tektoncd/results/pkg/cli/dev/format" "os" "github.com/spf13/cobra" - "github.com/tektoncd/results/pkg/cli/flags" - "github.com/tektoncd/results/pkg/cli/format" pb "github.com/tektoncd/results/proto/v1alpha2/results_go_proto" ) diff --git a/pkg/cli/cmd/records/list.go b/pkg/cli/dev/cmd/records/list.go similarity index 94% rename from pkg/cli/cmd/records/list.go rename to pkg/cli/dev/cmd/records/list.go index 885aadca0..01a49e21f 100644 --- a/pkg/cli/cmd/records/list.go +++ b/pkg/cli/dev/cmd/records/list.go @@ -2,11 +2,11 @@ package records import ( "fmt" + "github.com/tektoncd/results/pkg/cli/dev/flags" + "github.com/tektoncd/results/pkg/cli/dev/format" "os" "github.com/spf13/cobra" - "github.com/tektoncd/results/pkg/cli/flags" - "github.com/tektoncd/results/pkg/cli/format" pb "github.com/tektoncd/results/proto/v1alpha2/results_go_proto" ) diff --git a/pkg/cli/cmd/records/records.go b/pkg/cli/dev/cmd/records/records.go similarity index 89% rename from pkg/cli/cmd/records/records.go rename to pkg/cli/dev/cmd/records/records.go index 3b3250a79..fb993579f 100644 --- a/pkg/cli/cmd/records/records.go +++ b/pkg/cli/dev/cmd/records/records.go @@ -2,7 +2,7 @@ package records import ( "github.com/spf13/cobra" - "github.com/tektoncd/results/pkg/cli/flags" + "github.com/tektoncd/results/pkg/cli/dev/flags" ) // Command returns a cobra command for `records` sub commands diff --git a/pkg/cli/config/config.go b/pkg/cli/dev/config/config.go similarity index 100% rename from pkg/cli/config/config.go rename to pkg/cli/dev/config/config.go diff --git a/pkg/cli/config/config_test.go b/pkg/cli/dev/config/config_test.go similarity index 100% rename from pkg/cli/config/config_test.go rename to pkg/cli/dev/config/config_test.go diff --git a/pkg/cli/config/testdata/config.yaml b/pkg/cli/dev/config/testdata/config.yaml similarity index 100% rename from pkg/cli/config/testdata/config.yaml rename to pkg/cli/dev/config/testdata/config.yaml diff --git a/pkg/cli/config/testdata/empty.yaml b/pkg/cli/dev/config/testdata/empty.yaml similarity index 100% rename from pkg/cli/config/testdata/empty.yaml rename to pkg/cli/dev/config/testdata/empty.yaml diff --git a/pkg/cli/flags/flags.go b/pkg/cli/dev/flags/flags.go similarity index 100% rename from pkg/cli/flags/flags.go rename to pkg/cli/dev/flags/flags.go diff --git a/pkg/cli/format/format.go b/pkg/cli/dev/format/format.go similarity index 100% rename from pkg/cli/format/format.go rename to pkg/cli/dev/format/format.go diff --git a/pkg/cli/portforward/portforward.go b/pkg/cli/dev/portforward/portforward.go similarity index 100% rename from pkg/cli/portforward/portforward.go rename to pkg/cli/dev/portforward/portforward.go