From 72bbe64da7bf775a13a04cb80eddff7aeae69232 Mon Sep 17 00:00:00 2001 From: Thane Thomson Date: Fri, 11 Mar 2022 14:10:46 -0500 Subject: [PATCH] proto: update proto generation to use buf (#7975) * Hard-code go_package option for .proto files Signed-off-by: Thane Thomson * Automatically relocate generated ABCI types after proto-gen Signed-off-by: Thane Thomson * Skip building gogoproto (i.e. only build our types) Signed-off-by: Thane Thomson * Remove unnecessary proto generation scripts Signed-off-by: Thane Thomson * Upgrade buf config from v1beta1 to v1 Signed-off-by: Thane Thomson * Add simple proto generation script Signed-off-by: Thane Thomson * Replace buf-based protobuf generation with simple protoc-based approach Signed-off-by: Thane Thomson * Remove custom buf-based Docker image generation config and Dockerfile Signed-off-by: Thane Thomson * Adopt Cosmos SDK's approach to Protobuf linting and breakage checking in CI Signed-off-by: Thane Thomson * Suppress command echo when running proto checks Signed-off-by: Thane Thomson * Fix proto-check workflow YAML indentation Signed-off-by: Thane Thomson * Restore proto-format target Signed-off-by: Thane Thomson * Replace custom BASH script with make equivalent Signed-off-by: Thane Thomson * Remove proto linting/breaking changes CI checks after discussion today Signed-off-by: Thane Thomson * Remove dangling reference to CI workflow that no longer exists Signed-off-by: Thane Thomson * Update contributing guidelines relating to protos Signed-off-by: Thane Thomson * Use buf instead for generating protos Signed-off-by: Thane Thomson * Remove unused buf config for gogoprotobuf Signed-off-by: Thane Thomson * Add reminder for if we migrate fully to buf Signed-off-by: Thane Thomson * Restore protopackage script for #8065 Signed-off-by: Thane Thomson * Fix permissions on protopackage script Signed-off-by: Thane Thomson * Update contributing guidelines to show building of protos using buf Signed-off-by: Thane Thomson * Fix breaking changes check and add disclaimer Signed-off-by: Thane Thomson * Expand on contributing guidelines for clarity Signed-off-by: Thane Thomson * Re-remove old proto workflows Signed-off-by: Thane Thomson * Add buf-based proto linting workflow in CI Signed-off-by: Thane Thomson * Superficially reorder proto targets Signed-off-by: Thane Thomson * Fix proto lints Signed-off-by: Thane Thomson * Fix GA workflow YAML indentation Signed-off-by: Thane Thomson * Temporarily use forked version of mlc Use forked version of markdown-link-check until https://github.com/gaurav-nelson/github-action-markdown-link-check/pull/126 lands. Signed-off-by: Thane Thomson * Temporarily disable markdown link checker Signed-off-by: Thane Thomson * Remove gogo protos - superseded by version from buf registry Signed-off-by: Thane Thomson --- .github/workflows/markdown-links.yml | 34 +++--- .github/workflows/proto-check.yml | 24 ---- .github/workflows/proto-dockerfile.yml | 64 ----------- .github/workflows/proto-lint.yml | 21 ++++ CONTRIBUTING.md | 28 ++++- Makefile | 62 ++++++----- buf.gen.yaml | 19 ++-- buf.work.yaml | 3 + proto/Dockerfile | 20 ---- proto/buf.lock | 7 ++ buf.yaml => proto/buf.yaml | 17 +-- proto/tendermint/blocksync/types.proto | 2 + proto/tendermint/consensus/types.proto | 2 + proto/tendermint/consensus/wal.proto | 2 + proto/tendermint/crypto/keys.proto | 2 + proto/tendermint/crypto/proof.proto | 2 + proto/tendermint/libs/bits/types.proto | 2 + proto/tendermint/mempool/types.proto | 2 + proto/tendermint/p2p/conn.proto | 2 + proto/tendermint/p2p/pex.proto | 2 + proto/tendermint/p2p/types.proto | 2 + proto/tendermint/statesync/types.proto | 2 + proto/tendermint/types/block.proto | 2 + proto/tendermint/types/canonical.proto | 2 + proto/tendermint/types/events.proto | 2 + proto/tendermint/types/evidence.proto | 2 + proto/tendermint/types/params.proto | 2 + proto/tendermint/types/types.proto | 2 +- proto/tendermint/types/validator.proto | 2 + proto/tendermint/version/types.proto | 2 + scripts/protocgen.sh | 44 -------- scripts/protopackage.sh | 2 +- third_party/proto/gogoproto/gogo.proto | 147 ------------------------- 33 files changed, 160 insertions(+), 370 deletions(-) delete mode 100644 .github/workflows/proto-check.yml delete mode 100644 .github/workflows/proto-dockerfile.yml create mode 100644 .github/workflows/proto-lint.yml create mode 100644 buf.work.yaml delete mode 100644 proto/Dockerfile create mode 100644 proto/buf.lock rename buf.yaml => proto/buf.yaml (50%) delete mode 100755 scripts/protocgen.sh delete mode 100644 third_party/proto/gogoproto/gogo.proto diff --git a/.github/workflows/markdown-links.yml b/.github/workflows/markdown-links.yml index e67c05162..a03dd9b72 100644 --- a/.github/workflows/markdown-links.yml +++ b/.github/workflows/markdown-links.yml @@ -1,17 +1,19 @@ -name: Check Markdown links +# TODO: Re-enable when https://github.com/gaurav-nelson/github-action-markdown-link-check/pull/126 lands. -on: - push: - branches: - - master - pull_request: - branches: [master] - -jobs: - markdown-link-check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: gaurav-nelson/github-action-markdown-link-check@1.0.13 - with: - check-modified-files-only: 'yes' +#name: Check Markdown links +# +#on: +# push: +# branches: +# - master +# pull_request: +# branches: [master] +# +#jobs: +# markdown-link-check: +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v3 +# - uses: gaurav-nelson/github-action-markdown-link-check@v1.0.13 +# with: +# check-modified-files-only: 'yes' diff --git a/.github/workflows/proto-check.yml b/.github/workflows/proto-check.yml deleted file mode 100644 index d17139e89..000000000 --- a/.github/workflows/proto-check.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Proto Check -# Protobuf runs buf (https://buf.build/) lint and check-breakage -# This workflow is only run when a file in the proto directory -# has been modified. -on: - workflow_dispatch: # allow running workflow manually - pull_request: - paths: - - "proto/*" -jobs: - proto-lint: - runs-on: ubuntu-latest - timeout-minutes: 4 - steps: - - uses: actions/checkout@v3 - - name: lint - run: make proto-lint - proto-breakage: - runs-on: ubuntu-latest - timeout-minutes: 4 - steps: - - uses: actions/checkout@v3 - - name: check-breakage - run: make proto-check-breaking-ci diff --git a/.github/workflows/proto-dockerfile.yml b/.github/workflows/proto-dockerfile.yml deleted file mode 100644 index 4056ef94d..000000000 --- a/.github/workflows/proto-dockerfile.yml +++ /dev/null @@ -1,64 +0,0 @@ -# This workflow (re)builds and pushes a Docker image containing the -# protobuf build tools used by the other workflows. -# -# When making changes that require updates to the builder image, you -# should merge the updates first and wait for this workflow to complete, -# so that the changes will be available for the dependent workflows. -# - -name: Build & Push Proto Builder Image -on: - pull_request: - paths: - - "proto/*" - push: - branches: - - master - paths: - - "proto/*" - schedule: - # run this job once a month to recieve any go or buf updates - - cron: "0 9 1 * *" - -env: - REGISTRY: ghcr.io - IMAGE_NAME: tendermint/docker-build-proto - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Check out and assign tags - id: prep - run: | - DOCKER_IMAGE="${REGISTRY}/${IMAGE_NAME}" - VERSION=noop - if [[ "$GITHUB_REF" == "refs/tags/*" ]]; then - VERSION="${GITHUB_REF#refs/tags/}" - elif [[ "$GITHUB_REF" == "refs/heads/*" ]]; then - VERSION="$(echo "${GITHUB_REF#refs/heads/}" | sed -r 's#/+#-#g')" - if [[ "${{ github.event.repository.default_branch }}" = "$VERSION" ]]; then - VERSION=latest - fi - fi - TAGS="${DOCKER_IMAGE}:${VERSION}" - echo ::set-output name=tags::"${TAGS}" - - - name: Set up docker buildx - uses: docker/setup-buildx-action@v1.6.0 - - - name: Log in to the container registry - uses: docker/login-action@v1.14.1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and publish image - uses: docker/build-push-action@v2.9.0 - with: - context: ./proto - file: ./proto/Dockerfile - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.prep.outputs.tags }} diff --git a/.github/workflows/proto-lint.yml b/.github/workflows/proto-lint.yml new file mode 100644 index 000000000..6e7016b40 --- /dev/null +++ b/.github/workflows/proto-lint.yml @@ -0,0 +1,21 @@ +name: Protobuf Lint +on: + pull_request: + paths: + - 'proto/**' + push: + branches: + - master + paths: + - 'proto/**' + +jobs: + lint: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v3 + - uses: bufbuild/buf-setup-action@v1.1.0 + - uses: bufbuild/buf-lint-action@v1 + with: + input: 'proto' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4613f84e..bfa56bea6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -105,11 +105,33 @@ specify exactly the dependency you want to update, eg. ## Protobuf -We use [Protocol Buffers](https://developers.google.com/protocol-buffers) along with [gogoproto](https://github.com/gogo/protobuf) to generate code for use across Tendermint Core. +We use [Protocol Buffers](https://developers.google.com/protocol-buffers) along +with [`gogoproto`](https://github.com/gogo/protobuf) to generate code for use +across Tendermint Core. -For linting, checking breaking changes and generating proto stubs, we use [buf](https://buf.build/). If you would like to run linting and check if the changes you have made are breaking then you will need to have docker running locally. Then the linting cmd will be `make proto-lint` and the breaking changes check will be `make proto-check-breaking`. +To generate proto stubs, lint, and check protos for breaking changes, you will +need to install [buf](https://buf.build/) and `gogoproto`. Then, from the root +of the repository, run: -We use [Docker](https://www.docker.com/) to generate the protobuf stubs. To generate the stubs yourself, make sure docker is running then run `make proto-gen`. This command uses the spec repo to get the necessary protobuf files for generating the go code. If you are modifying the proto files manually for changes in the core data structures, you will need to clone them into the go repo and comment out lines 22-37 of the file `./scripts/protocgen.sh`. +```bash +# Lint all of the .proto files in proto/tendermint +make proto-lint + +# Check if any of your local changes (prior to committing to the Git repository) +# are breaking +make proto-check-breaking + +# Generate Go code from the .proto files in proto/tendermint +make proto-gen +``` + +To automatically format `.proto` files, you will need +[`clang-format`](https://clang.llvm.org/docs/ClangFormat.html) installed. Once +installed, you can run: + +```bash +make proto-format +``` ### Visual Studio Code diff --git a/Makefile b/Makefile index aac60c902..13d6ada56 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,6 @@ endif LD_FLAGS = -X github.com/tendermint/tendermint/version.TMVersion=$(VERSION) BUILD_FLAGS = -mod=readonly -ldflags "$(LD_FLAGS)" -BUILD_IMAGE := ghcr.io/tendermint/docker-build-proto -DOCKER_PROTO_BUILDER := docker run -v $(shell pwd):/workspace --workdir /workspace $(BUILD_IMAGE) CGO_ENABLED ?= 0 # handle nostrip @@ -73,47 +71,57 @@ install: $(BUILDDIR)/: mkdir -p $@ -# The Docker image containing the generator, formatter, and linter. -# This is generated by proto/Dockerfile. To update tools, make changes -# there and run the Build & Push Proto Builder Image workflow. -IMAGE := ghcr.io/tendermint/docker-build-proto:latest -DOCKER_PROTO_BUILDER := docker run -v $(shell pwd):/workspace --workdir /workspace $(IMAGE) -HTTPS_GIT := https://github.com/tendermint/tendermint.git ############################################################################### ### Protobuf ### ############################################################################### -proto-all: proto-lint proto-check-breaking -.PHONY: proto-all +check-proto-deps: +ifeq (,$(shell which buf)) + $(error "buf is required for Protobuf building, linting and breakage checking. See https://docs.buf.build/installation for installation instructions.") +endif +ifeq (,$(shell which protoc-gen-gogofaster)) + $(error "gogofaster plugin for protoc is required. Run 'go install github.com/gogo/protobuf/protoc-gen-gogofaster@latest' to install") +endif +.PHONY: check-proto-deps + +check-proto-format-deps: +ifeq (,$(shell which clang-format)) + $(error "clang-format is required for Protobuf formatting. See instructions for your platform on how to install it.") +endif +.PHONY: check-proto-format-deps -proto-gen: +proto-gen: check-proto-deps @echo "Generating Protobuf files" - @$(DOCKER_PROTO_BUILDER) buf generate --template=./buf.gen.yaml --config ./buf.yaml + @buf generate + @mv ./proto/tendermint/abci/types.pb.go ./abci/types/ .PHONY: proto-gen -# TODO: Should be removed when work on ABCI++ is complete. -# For more information, see https://github.com/tendermint/tendermint/issues/8066 -abci-proto-gen: - ./scripts/abci-gen.sh -.PHONY: abci-proto-gen - -proto-lint: - @$(DOCKER_PROTO_BUILDER) buf lint --error-format=json --config ./buf.yaml +# These targets are provided for convenience and are intended for local +# execution only. +proto-lint: check-proto-deps + @echo "Linting Protobuf files" + @buf lint .PHONY: proto-lint -proto-format: +proto-format: check-proto-format-deps @echo "Formatting Protobuf files" - @$(DOCKER_PROTO_BUILDER) find . -name '*.proto' -path "./proto/*" -exec clang-format -i {} \; + @find . -name '*.proto' -path "./proto/*" -exec clang-format -i {} \; .PHONY: proto-format -proto-check-breaking: - @$(DOCKER_PROTO_BUILDER) buf breaking --against .git --config ./buf.yaml +proto-check-breaking: check-proto-deps + @echo "Checking for breaking changes in Protobuf files against local branch" + @echo "Note: This is only useful if your changes have not yet been committed." + @echo " Otherwise read up on buf's \"breaking\" command usage:" + @echo " https://docs.buf.build/breaking/usage" + @buf breaking --against ".git" .PHONY: proto-check-breaking -proto-check-breaking-ci: - @$(DOCKER_PROTO_BUILDER) buf breaking --against $(HTTPS_GIT) --config ./buf.yaml -.PHONY: proto-check-breaking-ci +# TODO: Should be removed when work on ABCI++ is complete. +# For more information, see https://github.com/tendermint/tendermint/issues/8066 +abci-proto-gen: + ./scripts/abci-gen.sh +.PHONY: abci-proto-gen ############################################################################### ### Build ABCI ### diff --git a/buf.gen.yaml b/buf.gen.yaml index 335e25241..d972360bb 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -1,14 +1,9 @@ -# The version of the generation template (required). -# The only currently-valid value is v1beta1. -version: v1beta1 - -# The plugins to run. +version: v1 plugins: - # The name of the plugin. - name: gogofaster - # The directory where the generated proto output will be written. - # The directory is relative to where the generation tool was run. - out: proto - # Set options to assign import paths to the well-known types - # and to enable service generation. - opt: Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/duration.proto=github.com/golang/protobuf/ptypes/duration,plugins=grpc,paths=source_relative + out: ./proto/ + opt: + - Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types + - Mgoogle/protobuf/duration.proto=github.com/golang/protobuf/ptypes/duration + - plugins=grpc + - paths=source_relative diff --git a/buf.work.yaml b/buf.work.yaml new file mode 100644 index 000000000..1878b341b --- /dev/null +++ b/buf.work.yaml @@ -0,0 +1,3 @@ +version: v1 +directories: + - proto diff --git a/proto/Dockerfile b/proto/Dockerfile deleted file mode 100644 index 92fff39e6..000000000 --- a/proto/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# This Dockerfile defines an image containing tools for linting, formatting, -# and compiling the Tendermint protos. -FROM golang:1.17-alpine - -# Install a commonly used set of programs for use with our protos. -# clang-extra-tools is included here because it provides clang-format, -# used to format the .proto files. -RUN apk add --no-cache build-base clang-extra-tools curl git - -ENV GOLANG_PROTOBUF_VERSION=1.3.1 \ - GOGO_PROTOBUF_VERSION=1.3.2 - -# Retrieve the go protoc programs and copy them into the PATH -RUN go install github.com/golang/protobuf/protoc-gen-go@v${GOLANG_PROTOBUF_VERSION} && \ - go install github.com/gogo/protobuf/protoc-gen-gogo@v${GOGO_PROTOBUF_VERSION} && \ - go install github.com/gogo/protobuf/protoc-gen-gogofaster@v${GOGO_PROTOBUF_VERSION} && \ - mv "$(go env GOPATH)"/bin/* /usr/local/bin/ - -# Copy the 'buf' program out of the buildbuf/buf container. -COPY --from=bufbuild/buf:latest /usr/local/bin/* /usr/local/bin/ diff --git a/proto/buf.lock b/proto/buf.lock new file mode 100644 index 000000000..8c415e1af --- /dev/null +++ b/proto/buf.lock @@ -0,0 +1,7 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: gogo + repository: protobuf + commit: 4df00b267f944190a229ce3695781e99 diff --git a/buf.yaml b/proto/buf.yaml similarity index 50% rename from buf.yaml rename to proto/buf.yaml index cc4aced57..816db10f7 100644 --- a/buf.yaml +++ b/proto/buf.yaml @@ -1,16 +1,11 @@ -version: v1beta1 - -build: - roots: - - proto - - third_party/proto +version: v1 +deps: + - buf.build/gogo/protobuf +breaking: + use: + - FILE lint: use: - BASIC - FILE_LOWER_SNAKE_CASE - UNARY_RPC - ignore: - - gogoproto -breaking: - use: - - FILE diff --git a/proto/tendermint/blocksync/types.proto b/proto/tendermint/blocksync/types.proto index 999a6db7f..4febfd145 100644 --- a/proto/tendermint/blocksync/types.proto +++ b/proto/tendermint/blocksync/types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.blocksync; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/blocksync"; + import "tendermint/types/block.proto"; // BlockRequest requests a block for a specific height diff --git a/proto/tendermint/consensus/types.proto b/proto/tendermint/consensus/types.proto index fd0e427d0..7abe0d74b 100644 --- a/proto/tendermint/consensus/types.proto +++ b/proto/tendermint/consensus/types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.consensus; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/consensus"; + import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; import "tendermint/libs/bits/types.proto"; diff --git a/proto/tendermint/consensus/wal.proto b/proto/tendermint/consensus/wal.proto index 22531e0d0..44afa2c0c 100644 --- a/proto/tendermint/consensus/wal.proto +++ b/proto/tendermint/consensus/wal.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.consensus; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/consensus"; + import "gogoproto/gogo.proto"; import "tendermint/consensus/types.proto"; import "tendermint/types/events.proto"; diff --git a/proto/tendermint/crypto/keys.proto b/proto/tendermint/crypto/keys.proto index faaaed6fc..d66f9fc0c 100644 --- a/proto/tendermint/crypto/keys.proto +++ b/proto/tendermint/crypto/keys.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.crypto; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + import "gogoproto/gogo.proto"; // PublicKey defines the keys available for use with Tendermint Validators diff --git a/proto/tendermint/crypto/proof.proto b/proto/tendermint/crypto/proof.proto index bde5a4ff9..975df7685 100644 --- a/proto/tendermint/crypto/proof.proto +++ b/proto/tendermint/crypto/proof.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.crypto; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + import "gogoproto/gogo.proto"; message Proof { diff --git a/proto/tendermint/libs/bits/types.proto b/proto/tendermint/libs/bits/types.proto index 1ea81d33f..3111d113a 100644 --- a/proto/tendermint/libs/bits/types.proto +++ b/proto/tendermint/libs/bits/types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.libs.bits; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; + message BitArray { int64 bits = 1; repeated uint64 elems = 2; diff --git a/proto/tendermint/mempool/types.proto b/proto/tendermint/mempool/types.proto index 7fa53ef79..b55d9717b 100644 --- a/proto/tendermint/mempool/types.proto +++ b/proto/tendermint/mempool/types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.mempool; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/mempool"; + message Txs { repeated bytes txs = 1; } diff --git a/proto/tendermint/p2p/conn.proto b/proto/tendermint/p2p/conn.proto index 62abd4f5f..b12de6c82 100644 --- a/proto/tendermint/p2p/conn.proto +++ b/proto/tendermint/p2p/conn.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.p2p; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; + import "gogoproto/gogo.proto"; import "tendermint/crypto/keys.proto"; diff --git a/proto/tendermint/p2p/pex.proto b/proto/tendermint/p2p/pex.proto index 374047b0f..545743444 100644 --- a/proto/tendermint/p2p/pex.proto +++ b/proto/tendermint/p2p/pex.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.p2p; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; + import "gogoproto/gogo.proto"; message PexAddress { diff --git a/proto/tendermint/p2p/types.proto b/proto/tendermint/p2p/types.proto index e4e86434a..faccd59d2 100644 --- a/proto/tendermint/p2p/types.proto +++ b/proto/tendermint/p2p/types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.p2p; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/p2p"; + import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; diff --git a/proto/tendermint/statesync/types.proto b/proto/tendermint/statesync/types.proto index 12f7a1d23..94e22e834 100644 --- a/proto/tendermint/statesync/types.proto +++ b/proto/tendermint/statesync/types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.statesync; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/statesync"; + import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; import "tendermint/types/params.proto"; diff --git a/proto/tendermint/types/block.proto b/proto/tendermint/types/block.proto index 8a713b7dc..84e9bb15d 100644 --- a/proto/tendermint/types/block.proto +++ b/proto/tendermint/types/block.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.types; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; import "tendermint/types/evidence.proto"; diff --git a/proto/tendermint/types/canonical.proto b/proto/tendermint/types/canonical.proto index 58d8c44e9..e88fd6ffe 100644 --- a/proto/tendermint/types/canonical.proto +++ b/proto/tendermint/types/canonical.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.types; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + import "gogoproto/gogo.proto"; import "tendermint/types/types.proto"; import "google/protobuf/timestamp.proto"; diff --git a/proto/tendermint/types/events.proto b/proto/tendermint/types/events.proto index 1ef715872..a1e5cc498 100644 --- a/proto/tendermint/types/events.proto +++ b/proto/tendermint/types/events.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.types; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + message EventDataRoundState { int64 height = 1; int32 round = 2; diff --git a/proto/tendermint/types/evidence.proto b/proto/tendermint/types/evidence.proto index d42c84363..44ef70cf6 100644 --- a/proto/tendermint/types/evidence.proto +++ b/proto/tendermint/types/evidence.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.types; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "tendermint/types/types.proto"; diff --git a/proto/tendermint/types/params.proto b/proto/tendermint/types/params.proto index a87670c9f..c5a9e048f 100644 --- a/proto/tendermint/types/params.proto +++ b/proto/tendermint/types/params.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.types; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; diff --git a/proto/tendermint/types/types.proto b/proto/tendermint/types/types.proto index ef448d9ca..bc2c53196 100644 --- a/proto/tendermint/types/types.proto +++ b/proto/tendermint/types/types.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package tendermint.types; -option go_package = "github.com/tendermint/tendermint/types"; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; diff --git a/proto/tendermint/types/validator.proto b/proto/tendermint/types/validator.proto index 4ab5e4c32..49860b96d 100644 --- a/proto/tendermint/types/validator.proto +++ b/proto/tendermint/types/validator.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.types; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + import "gogoproto/gogo.proto"; import "tendermint/crypto/keys.proto"; diff --git a/proto/tendermint/version/types.proto b/proto/tendermint/version/types.proto index d7d4cc09f..37124dd4e 100644 --- a/proto/tendermint/version/types.proto +++ b/proto/tendermint/version/types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package tendermint.version; +option go_package = "github.com/tendermint/tendermint/proto/tendermint/version"; + import "gogoproto/gogo.proto"; // Consensus captures the consensus rules for processing a block in the diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh deleted file mode 100755 index 8e121448b..000000000 --- a/scripts/protocgen.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# By default, this script runs against the latest commit to the master branch -# in the Tendermint spec repository. To use this script with a different version -# of the spec repository, run it with the $VERS environment variable set to the -# desired branch name or commit hash from the spec repo. - -: ${VERS:=master} - -echo "fetching proto files" - -# Get shortened ref of commit -REF=$(curl -H "Accept: application/vnd.github.v3.sha" -qL \ - "https://api.github.com/repos/tendermint/spec/commits/${VERS}" \ - | cut -c -7) - -readonly OUTDIR="tendermint-spec-${REF}" -curl -qL "https://api.github.com/repos/tendermint/spec/tarball/${REF}" | tar -xzf - ${OUTDIR}/ - -cp -r ${OUTDIR}/proto/tendermint/* ./proto/tendermint -cp -r ${OUTDIR}/third_party/** ./third_party - -MODNAME="$(go list -m)" -find ./proto/tendermint -name '*.proto' -not -path "./proto/tendermint/abci/types.proto" \ - -exec sh ./scripts/protopackage.sh {} "$MODNAME" ';' - -# For historical compatibility, the abci file needs to get a slightly different import name -# so that it can be moved into the ./abci/types directory. -sh ./scripts/protopackage.sh ./proto/tendermint/abci/types.proto $MODNAME "abci/types" - -buf generate --path proto/tendermint --template ./${OUTDIR}/buf.gen.yaml --config ./${OUTDIR}/buf.yaml - -mv ./proto/tendermint/abci/types.pb.go ./abci/types - -echo "proto files have been compiled" - -echo "removing copied files" - -find ${OUTDIR}/proto/tendermint/ -name *.proto \ - | sed "s/$OUTDIR\/\(.*\)/\1/g" \ - | xargs -I {} rm {} - -rm -rf ${OUTDIR} diff --git a/scripts/protopackage.sh b/scripts/protopackage.sh index a69e758ca..5eace2752 100755 --- a/scripts/protopackage.sh +++ b/scripts/protopackage.sh @@ -16,7 +16,7 @@ if [[ ! -z "$3" ]]; then fi -if ! grep -q 'option\s\+go_package\s\+=\s\+.*;' $FNAME; then +if ! grep -q 'option\s\+go_package\s\+=\s\+.*;' $FNAME; then sed -i "s/\(package tendermint.*\)/\1\n\noption go_package = \"$MODNAME\/$PACKAGE\";/g" $FNAME else sed -i "s/option\s\+go_package\s\+=\s\+.*;/option go_package = \"$MODNAME\/$PACKAGE\";/g" $FNAME diff --git a/third_party/proto/gogoproto/gogo.proto b/third_party/proto/gogoproto/gogo.proto deleted file mode 100644 index 31c516cd0..000000000 --- a/third_party/proto/gogoproto/gogo.proto +++ /dev/null @@ -1,147 +0,0 @@ -// Protocol Buffers for Go with Gadgets -// -// Copied from https://github.com/gogo/protobuf/blob/master/gogoproto/gogo.proto -// -// Copyright (c) 2013, The GoGo Authors. All rights reserved. -// http://github.com/gogo/protobuf -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto2"; -package gogoproto; - -import "google/protobuf/descriptor.proto"; - -option java_package = "com.google.protobuf"; -option java_outer_classname = "GoGoProtos"; -option go_package = "github.com/gogo/protobuf/gogoproto"; - -extend google.protobuf.EnumOptions { - optional bool goproto_enum_prefix = 62001; - optional bool goproto_enum_stringer = 62021; - optional bool enum_stringer = 62022; - optional string enum_customname = 62023; - optional bool enumdecl = 62024; -} - -extend google.protobuf.EnumValueOptions { - optional string enumvalue_customname = 66001; -} - -extend google.protobuf.FileOptions { - optional bool goproto_getters_all = 63001; - optional bool goproto_enum_prefix_all = 63002; - optional bool goproto_stringer_all = 63003; - optional bool verbose_equal_all = 63004; - optional bool face_all = 63005; - optional bool gostring_all = 63006; - optional bool populate_all = 63007; - optional bool stringer_all = 63008; - optional bool onlyone_all = 63009; - - optional bool equal_all = 63013; - optional bool description_all = 63014; - optional bool testgen_all = 63015; - optional bool benchgen_all = 63016; - optional bool marshaler_all = 63017; - optional bool unmarshaler_all = 63018; - optional bool stable_marshaler_all = 63019; - - optional bool sizer_all = 63020; - - optional bool goproto_enum_stringer_all = 63021; - optional bool enum_stringer_all = 63022; - - optional bool unsafe_marshaler_all = 63023; - optional bool unsafe_unmarshaler_all = 63024; - - optional bool goproto_extensions_map_all = 63025; - optional bool goproto_unrecognized_all = 63026; - optional bool gogoproto_import = 63027; - optional bool protosizer_all = 63028; - optional bool compare_all = 63029; - optional bool typedecl_all = 63030; - optional bool enumdecl_all = 63031; - - optional bool goproto_registration = 63032; - optional bool messagename_all = 63033; - - optional bool goproto_sizecache_all = 63034; - optional bool goproto_unkeyed_all = 63035; -} - -extend google.protobuf.MessageOptions { - optional bool goproto_getters = 64001; - optional bool goproto_stringer = 64003; - optional bool verbose_equal = 64004; - optional bool face = 64005; - optional bool gostring = 64006; - optional bool populate = 64007; - optional bool stringer = 67008; - optional bool onlyone = 64009; - - optional bool equal = 64013; - optional bool description = 64014; - optional bool testgen = 64015; - optional bool benchgen = 64016; - optional bool marshaler = 64017; - optional bool unmarshaler = 64018; - optional bool stable_marshaler = 64019; - - optional bool sizer = 64020; - - optional bool unsafe_marshaler = 64023; - optional bool unsafe_unmarshaler = 64024; - - optional bool goproto_extensions_map = 64025; - optional bool goproto_unrecognized = 64026; - - optional bool protosizer = 64028; - optional bool compare = 64029; - - optional bool typedecl = 64030; - - optional bool messagename = 64033; - - optional bool goproto_sizecache = 64034; - optional bool goproto_unkeyed = 64035; -} - -extend google.protobuf.FieldOptions { - optional bool nullable = 65001; - optional bool embed = 65002; - optional string customtype = 65003; - optional string customname = 65004; - optional string jsontag = 65005; - optional string moretags = 65006; - optional string casttype = 65007; - optional string castkey = 65008; - optional string castvalue = 65009; - - optional bool stdtime = 65010; - optional bool stdduration = 65011; - optional bool wktpointer = 65012; - - optional string castrepeated = 65013; -}