From 409b98d6d5f0708af501265993e3174412f89d13 Mon Sep 17 00:00:00 2001 From: Jono Wenger <jono@elixxir.io> Date: Thu, 13 Oct 2022 11:12:32 -0700 Subject: [PATCH] Update README to describe how to update protobuf compiler and use it --- README.md | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/README.md b/README.md index 9c693d8b7..1c169b50d 100644 --- a/README.md +++ b/README.md @@ -404,3 +404,96 @@ You can verify that all symbols got bound by unzipping `bindings-sources.jar` an Every time you make a change to the client or bindings, you must rebuild the client bindings into a `.aar` or `iOS.zip` to propagate those changes to the app. There's a script that runs gomobile for you in the `bindings-integration` repository. + + +## Regenerate Protobuf File + +First install the protobuf compiler or update by following the instructions in +[Installing Protocol Buffer Compiler](#installing-protocol-buffer-compiler) +below. + +Use the following command to compile a protocol buffer. + +```shell +protoc -I. -I../vendor --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative *.proto +``` + +* This command must be run from the directory containing the `.proto` file + being compiled. +* The `-I` flag specifies where to find imports used by the `.proto` file and + may need to be modified or removed to suit the .proto file being compiled.\ + * 💡 **Note:** Note: If you are importing a file from the vendor directory, + ensure that you have the correct version by running `go mod vendor`. +* If there is more than one proto file in the directory, replace `*.proto` with + the file’s name. +* If the `.proto` file does not use gRPC, then the `--go-grpc_out` and + `--go-grpc_opt` can be excluded. + + + +## Installing Protocol Buffer Compiler + +This guide describes how to install the required dependencies to compile +`.proto` files to Go. + +Before following the instructions below, be sure to remove all old versions of +`protoc`. If your previous protoc-gen-go file is not installed in your Go bin +directory, it will also need to be removed. + +If you have followed this guide previously when installing `protoc` and need to +update, you can simply follow the instructions below. No uninstallation or +removal is necessary. + +To compile a protocol buffer, you need the protocol buffer compiler `protoc` +along with two plugins `protoc-gen-go` and `protoc-gen-go-grpc`. Make sure you +use the correct versions as listed below. + +| | Version | Download | Documentation | +|----------------------|--------:|---------------------------------------------------------------------|-------------------------------------------------------------------------| +| `protoc` | 3.15.6 | https://github.com/protocolbuffers/protobuf/releases/tag/v3.15.6 | https://developers.google.com/protocol-buffers/docs/gotutorial | +| `protoc-gen-go` | 1.27.1 | https://github.com/protocolbuffers/protobuf-go/releases/tag/v1.27.1 | https://pkg.go.dev/google.golang.org/protobuf@v1.27.1/cmd/protoc-gen-go | +| `protoc-gen-go-grpc` | 1.2.0 | https://github.com/grpc/grpc-go/releases/tag/v1.2.0 | https://pkg.go.dev/google.golang.org/grpc/cmd/protoc-gen-go-grpc | + +1. Download the correct release of `protoc` from the + [release page](https://github.com/protocolbuffers/protobuf/releases) or use + the link from the table above to get the download for your OS. + + wget https://github.com/protocolbuffers/protobuf/releases/download/v3.15.6/protoc-3.15.6-linux-x86_64.zip + +2. Extract the files to a folder, such as `$HOME/.local`. + + unzip protoc-3.15.6-linux-x86_64.zip -d $HOME/.local + +3. Add the selected directory to your environment’s `PATH` variable, make sure + to include it in your `.profile` or `.bashrc` file. Also, include your go bin + directory (`$GOPATH/bin` or `$GOBIN`) if it is not already included. + + export PATH="$PATH:$HOME/.local/bin:$GOPATH/bin" + + 💡 **Note:** Make sure you update your configuration file once done with + source `.profile`. + +4. Now check that `protoc` is installed with the correct version by running the + following command. + + protoc --version + + Which prints the current version + + libprotoc 3.15.6 + +5. Next, download `protoc-gen-go` and `protoc-gen-go-grpc` using the version + found in the table above. + + go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27 + go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 + +6. Check that `protoc-gen-go` is installed with the correct version. + + protoc-gen-go --version + protoc-gen-go v1.27.1 + +7. Check that `protoc-gen-go-grpc` is installed with the correct version. + + protoc-gen-go-grpc --version + protoc-gen-go-grpc 1.2.0 \ No newline at end of file -- GitLab