Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/trpc-group/trpc-cmdline
Command line tool for tRPC
https://github.com/trpc-group/trpc-cmdline
Last synced: about 1 month ago
JSON representation
Command line tool for tRPC
- Host: GitHub
- URL: https://github.com/trpc-group/trpc-cmdline
- Owner: trpc-group
- License: other
- Created: 2023-10-08T09:04:49.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-05-17T07:08:32.000Z (4 months ago)
- Last Synced: 2024-06-21T16:59:30.277Z (3 months ago)
- Language: Go
- Homepage:
- Size: 6.45 MB
- Stars: 37
- Watchers: 6
- Forks: 18
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE-OF-CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
English | [中文](README.zh_CN.md)
# trpc-cmdline
[![Go Reference](https://pkg.go.dev/badge/github.com/trpc-group/trpc-cmdline.svg)](https://pkg.go.dev/github.com/trpc-group/trpc-cmdline)
[![Go Report Card](https://goreportcard.com/badge/trpc.group/trpc-go/trpc-cmdline)](https://goreportcard.com/report/trpc.group/trpc-go/trpc-cmdline)
[![LICENSE](https://img.shields.io/badge/license-Apache--2.0-green.svg)](https://github.com/trpc-group/trpc-cmdline/blob/main/LICENSE)
[![Releases](https://img.shields.io/github/release/trpc-group/trpc-cmdline.svg?style=flat-square)](https://github.com/trpc-group/trpc-cmdline/releases)
[![Tests](https://github.com/trpc-group/trpc-cmdline/actions/workflows/prc.yml/badge.svg)](https://github.com/trpc-group/trpc-cmdline/actions/workflows/prc.yml)
[![Coverage](https://codecov.io/gh/trpc-group/trpc-cmdline/branch/main/graph/badge.svg)](https://app.codecov.io/gh/trpc-group/trpc-cmdline/tree/main)trpc-cmdline is the command line tool for [trpc-cpp](https://github.com/trpc-group/trpc-cpp) and [trpc-go](https://github.com/trpc-group/trpc-go).
It supports the latest three major releases of [Go](https://go.dev/doc/devel/release).
## Installation
### Install trpc-cmdline
#### Install using go command
First, add the following into your `~/.gitconfig`:
```bash
[url "ssh://[email protected]/"]
insteadOf = https://github.com/
```Then run the following to install `trpc-cmdline`:
```bash
go install trpc.group/trpc-go/trpc-cmdline/trpc@latest
```### Dependencies
Use one of the following methods to download:
#### Using trpc setup
After installation of trpc-cmdline, simply running `trpc setup` will automatically install all the dependencies.
#### Install separately
Install protoc
$ # Reference: https://grpc.io/docs/protoc-installation/
$ PB_REL="https://github.com/protocolbuffers/protobuf/releases"
$ curl -LO $PB_REL/download/v3.15.8/protoc-3.15.8-linux-x86_64.zip
$ unzip -o protoc-3.15.8-linux-x86_64.zip -d $HOME/.local
$ export PATH=~/.local/bin:$PATH # Add this to your `~/.bashrc`.
$ protoc --version
libprotoc 3.15.8Install flatc
$ # Reference: https://github.com/google/flatbuffers/releases
$ wget https://github.com/google/flatbuffers/releases/download/v23.5.26/Linux.flatc.binary.g++-10.zip
$ unzip -o Linux.flatc.binary.g++-10.zip -d $HOME/.bin
$ export PATH=~/.bin:$PATH # Add this to your `~/.bashrc`.
$ flatc --version
flatc version 23.5.26Install protoc-gen-go
$ # Reference: https://grpc.io/docs/languages/go/quickstart/
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latestInstall goimports
$ go install golang.org/x/tools/cmd/goimports@latestInstall mockgen
$ # Reference: https://github.com/uber-go/mock
$ go install go.uber.org/mock/mockgen@latestInstall protoc-gen-validate and protoc-gen-validate-go
$ # Please download the binaries in https://github.com/bufbuild/protoc-gen-validate/releases
$ # Or:
$ go install github.com/envoyproxy/protoc-gen-validate@latest
$ go install github.com/envoyproxy/protoc-gen-validate/cmd/protoc-gen-validate-go@latest## Quick Start
### Generation of Full Project
* Copy and paste the following to `helloworld.proto`, you can get it from [docs/helloworld/helloworld.proto](docs/helloworld/helloworld.proto):
```protobuf
syntax = "proto3";
package helloworld;option go_package = "github.com/some-repo/examples/helloworld";
// HelloRequest is hello request.
message HelloRequest {
string msg = 1;
}// HelloResponse is hello response.
message HelloResponse {
string msg = 1;
}// HelloWorldService handles hello request and echo message.
service HelloWorldService {
// Hello says hello.
rpc Hello(HelloRequest) returns(HelloResponse);
}
```* Using trpc-cmdline to generate a full project:
```go
$ trpc create -p helloworld.proto -o out
```Note: `-p` specifies proto file, `-o` specifies the output directory,
for more information please run `trpc -h` and `trpc create -h`* Enter the output directory and start the server:
```bash
$ cd out
$ go run .
...
... trpc service:helloworld.HelloWorldService launch success, tcp:127.0.0.1:8000, serving ...
...
```* Open the output directory in another terminal and start the client:
```bash
$ go run cmd/client/main.go
... simple rpc receive:
```Note: Since the implementation of server service is an empty operation and the client sends empty data, therefore the log shows that the simple rpc receives an empty string.
* Now you may try to modify the service implementation located in `hello_world_service.go` and the client implementation located in `cmd/client/main.go` to create an echo server. You can refer to [https://github.com/trpc-group/trpc-go/tree/main/examples/helloworld](https://github.com/trpc-group/trpc-go/tree/main/examples/helloworld) for inspiration.
* The generated files are explained below:
```bash
$ tree
.
|-- cmd
| `-- client
| `-- main.go # Generated client code.
|-- go.mod
|-- go.sum
|-- hello_world_service.go # Generated server service implementation.
|-- hello_world_service_test.go
|-- main.go # Server entrypoint.
|-- stub # Stub code.
| `-- github.com
| `-- some-repo
| `-- examples
| `-- helloworld
| |-- go.mod
| |-- helloworld.pb.go
| |-- helloworld.proto
| |-- helloworld.trpc.go
| `-- helloworld_mock.go
`-- trpc_go.yaml # Configuration file for trpc-go.
```### Generation of RPC Stub
* Simply add `--rpconly` flag to generate rpc stub instead of a full project:
```go
$ trpc create -p helloworld.proto -o out --rpconly
$ tree out
out
|-- go.mod
|-- go.sum
|-- helloworld.pb.go
|-- helloworld.trpc.go
`-- helloworld_mock.go
```### Frequently Used Flags
The following lists some frequently used flags.
* `-f`: Force overwrite the existing code.
* `-d some-dir`: Search paths for pb files (including dependent pb files), can be specified multiple times.
* `--mock=false`: Disable generation of mock stub code.
* `--nogomod=true`: Do not generate go.mod file in the stub code, only effective when --rpconly=true, defaults to false.
* `-l cpp`:Generate stub code for cpp.
* `--validate=true`: Enables data validation. For detailed usage, see [/docs/examples/example-2/README.md](/docs/examples/example-2/README.md).**Note:** The proto import paths for options like `alias/gotag/validate/swagger` usually vary:
* `trpc.alias`: `import "trpc/proto/trpc_options.proto";`
* `trpc.go_tag`: `import "trpc/proto/trpc_options.proto";`
* `validate.rules`: `import "validate/validate.proto";`
* `trpc.swagger`: `import "trpc/swagger/swagger.proto";`For detailed usage, please refer to [/docs/examples/example-2/README.zh_CN.md](/docs/examples/example-2/README.zh_CN.md)
For additional flags please run `trpc -h` and `trpc [subcmd] -h`.
### Functionalities
Please check [Documentation](docs/README.md)
## Contributing
This project is open-source and accepts contributions. See the [contribution guide](CONTRIBUTING.md) for more information.