Categorygithub.com/joshcarp/grpctl
modulepackage
0.0.0-20231116013346-0f4f15defbc8
Repository: https://github.com/joshcarp/grpctl.git
Documentation: pkg.go.dev

# README

grpctl

Status GitHub Issues GitHub Pull Requests License

A golang package for easily creating custom cli tools from FileDescriptors, or through the gRPC reflection API.

📖 Table of contents

🪞 Reflection cli mode

To be used like grpcurl against reflection APIs but with tab completion.

grpctl

📥 Install

go get github.com/joshcarp/grpctl/cmd/grpctl
grpctl --help
  -a, --address string       Address in form 'host:port'
      --config string        Config file (default is $HOME/.grpctl.yaml)
  -H, --header stringArray   Header in form 'key: value'
  -h, --help                 help for grpctl
  -p, --plaintext            Dial grpc.WithInsecure

🗄️ File descriptor mode

To easily create a cli tool for your grpc APIs using the code generated protoreflect.FileDescriptor To view all options that can be used, see opts.go.

examplectl

📥 Install

func main() {
	cmd := &cobra.Command{
		Use:   "billingctl",
		Short: "an example cli tool for the gcp billing api",
	}
	err := grpctl.BuildCommand(cmd,
		grpctl.WithArgs(os.Args),
		grpctl.WithFileDescriptors(
			billing.File_google_cloud_billing_v1_cloud_billing_proto,
			billing.File_google_cloud_billing_v1_cloud_catalog_proto,
		),
	)
	if err != nil {
		log.Print(err)
	}
	if err := grpctl.RunCommand(cmd, context.Background()); err != nil {
		log.Print(err)
	}
}

🤖 Autocompletion

run grpctl completion --help and do what it says

🏳️‍🌈 Flags

  • --address
grpctl --address=<scheme://host:port>
  • it is important that the = is used with flags, otherwise the value will be interpreted as a command which does not exist.

  • --header

grpctl --address=<scheme://host:port> -H="Foo:Bar" -H="Bar: Foo"
  • Any white spaces at the start of the value will be stripped

  • --protocol

grpctl --address=<scheme://host:port> --protocol=<connect|grpc|grpcweb>
  • Specifies which rpc protocol to use, default=grpc

  • --http1

grpctl --address=<scheme://host:port> --http1
  • Use a http1.1 client instead of http2

🧠 Design

Design documents (more like a stream of consciousness) can be found in ./design.

🔧 Contributing

This project is still in an alpha state, any contributions are welcome see CONTRIBUTING.md.

There is also a slack channel on gophers slack: #grpctl

🖋️ License

See LICENSE for more details.

🎉 Acknowledgements

# Packages

No description provided by the author

# Functions

BuildCommand builds a grpctl command from a list of GrpctlOption.
CommandFromFileDescriptor adds commands to cmd from a single FileDescriptor.
CommandFromFileDescriptors adds commands to cmd from FileDescriptors.
CommandFromMethodDescriptor adds commands to cmd from a MethodDescriptor.
CommandFromServiceDescriptor adds commands to cmd from a ServiceDescriptor.
ReflectionCommand returns the grpctl command that is used in the grpctl binary.
WithArgs will set the args of the command as args[1:].
No description provided by the author
WithContextDescriptorFunc will modify the context before the main command is run but not in the completion stage.
WithContextFunc will modify the context before the main command is run but not in the completion stage.
WithContextFunc will add commands to the cobra command through the file descriptors provided.
WithReflection will enable grpc reflection on the command.
No description provided by the author

# Type aliases

CommandOption are options to customize the grpctl cobra command.