Build protobufs in Go, easily.
protobuild works by scanning the go package in a project and emitting correct
protoc commands, configured with the plugins, packages and details of your
choice.
The main benefit is that it makes it much easier to consume external types from vendored projects. By integrating the protoc include paths with Go's vendoring and GOPATH, builds are much easier to keep consistent across a project.
This comes from experience with generating protobufs with go generate in
swarmkit and the tool used with containerd. It should replace both.
Very early stages.
To ensure easy use with builds, we'll try to support go get. Install with the
following command:
go get -u github.com/containerd/protobuild
Protobuild works by providing a list of Go packages in which to build the protobufs. To get started with a project, you must do the following:
- 
Create a Protobuild.tomlfile in the root of your Go project. Use the example as a starting point.
- 
Make sure that the packages where you want your protobuf files have a Go file in place. Usually, adding a doc.gofile is sufficient. A package for protobuf should look like this:foo.proto doc.goWhere the contents of doc.gowill have a package declaration in it. See the example for details. Make sure the package name corresponds to what is in thego_packageoption.
- 
Run the protobuildcommand:go list ./... | grep -v vendor | xargs protobuild
Originally protoc-gen-go was supporting gRPC through its plugins mechanism. However gRPC support is later extracted as protoc-gen-go-gprc binary.
To use protoc-gen-go and protoc-gen-go-grpc. Please specify version = "2" and
both code generators instead of plugins like below.
version = "2"
generators = ["go", "go-grpc"]
protobuild is a containerd sub-project, licensed under the Apache 2.0 license. As a containerd sub-project, you will find the:
information in our containerd/project repository.