ghcr.io/cosmos/proto-builder:0.12.x
Below is the example of the Cosmos SDK’s commands for generating, linting, and formatting protobuf files that can be reused in any applications makefile.
scripts/
directory.
Buf
Buf is a protobuf tool that abstracts the needs to use the complicatedprotoc
toolchain on top of various other things that ensure you are using protobuf in accordance with the majority of the ecosystem. Within the cosmos-sdk repository there are a few files that have a buf prefix. Lets start with the top level and then dive into the various directories.
Workspace
At the root level directory a workspace is defined using buf workspaces. This helps if there are one or more protobuf containing directories in your project. Cosmos SDK example:Proto Directory
Next is theproto/
directory where all of our protobuf files live. In here there are many different buf files defined each serving a different purpose.
proto/
directory.
buf.gen.gogo.yaml
buf.gen.gogo.yaml
defines how the protobuf files should be generated for use with in the module. This file uses gogoproto, a separate generator from the google go-proto generator that makes working with various objects more ergonomic, and it has more performant encode and decode steps
Example of how to define
gen
files can be found herebuf.gen.pulsar.yaml
buf.gen.pulsar.yaml
defines how protobuf files should be generated using the new golang apiv2 of protobuf. This generator is used instead of the google go-proto generator because it has some extra helpers for Cosmos SDK applications and will have more performant encode and decode than the google go-proto generator. You can follow the development of this generator here.
Example of how to define
gen
files can be found herebuf.gen.swagger.yaml
buf.gen.swagger.yaml
generates the swagger documentation for the query and messages of the chain. This will only define the REST API end points that were defined in the query and msg servers. You can find examples of this here
Example of how to define
gen
files can be found herebuf.lock
This is an autogenerated file based off the dependencies required by the .gen
files. There is no need to copy the current one. If you depend on cosmos-sdk proto definitions a new entry for the Cosmos SDK will need to be provided. The dependency you will need to use is buf.build/cosmos/cosmos-sdk
.
buf.yaml
buf.yaml
defines the name of your package, which breakage checker to use and how to lint your protobuf files.
generate codec/testdata proto code
(cd testutil/testdata; buf generate)generate baseapp test messages
(cd baseapp/testutil; buf generate)move proto files to the right places
cp -r github.com/cosmos/cosmos-sdk/* ./ cp -r cosmossdk.io/** ./ rm -rf github.com cosmossdk.io go mod tidy ./scripts/protocgen-pulsar.shProto Directory
Next is theproto/
directory where all of our protobuf files live. In here there are many different buf files defined each serving a different purpose.
proto/
directory.
buf.gen.gogo.yaml
buf.gen.gogo.yaml
defines how the protobuf files should be generated for use with in the module. This file uses gogoproto, a separate generator from the google go-proto generator that makes working with various objects more ergonomic, and it has more performant encode and decode steps
Example of how to define
gen
files can be found herebuf.gen.pulsar.yaml
buf.gen.pulsar.yaml
defines how protobuf files should be generated using the new golang apiv2 of protobuf. This generator is used instead of the google go-proto generator because it has some extra helpers for Cosmos SDK applications and will have more performant encode and decode than the google go-proto generator. You can follow the development of this generator here.
Example of how to define
gen
files can be found herebuf.gen.swagger.yaml
buf.gen.swagger.yaml
generates the swagger documentation for the query and messages of the chain. This will only define the REST API end points that were defined in the query and msg servers. You can find examples of this here
Example of how to define
gen
files can be found herebuf.lock
This is an autogenerated file based off the dependencies required by the .gen
files. There is no need to copy the current one. If you depend on cosmos-sdk proto definitions a new entry for the Cosmos SDK will need to be provided. The dependency you will need to use is buf.build/cosmos/cosmos-sdk
.
buf.yaml
buf.yaml
defines the name of your package, which breakage checker to use and how to lint your protobuf files.