* Hard-code go_package option for .proto files Signed-off-by: Thane Thomson <connect@thanethomson.com> * Automatically relocate generated ABCI types after proto-gen Signed-off-by: Thane Thomson <connect@thanethomson.com> * Skip building gogoproto (i.e. only build our types) Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove unnecessary proto generation scripts Signed-off-by: Thane Thomson <connect@thanethomson.com> * Upgrade buf config from v1beta1 to v1 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add simple proto generation script Signed-off-by: Thane Thomson <connect@thanethomson.com> * Replace buf-based protobuf generation with simple protoc-based approach Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove custom buf-based Docker image generation config and Dockerfile Signed-off-by: Thane Thomson <connect@thanethomson.com> * Adopt Cosmos SDK's approach to Protobuf linting and breakage checking in CI Signed-off-by: Thane Thomson <connect@thanethomson.com> * Suppress command echo when running proto checks Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix proto-check workflow YAML indentation Signed-off-by: Thane Thomson <connect@thanethomson.com> * Restore proto-format target Signed-off-by: Thane Thomson <connect@thanethomson.com> * Replace custom BASH script with make equivalent Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove proto linting/breaking changes CI checks after discussion today Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove dangling reference to CI workflow that no longer exists Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update contributing guidelines relating to protos Signed-off-by: Thane Thomson <connect@thanethomson.com> * Use buf instead for generating protos Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove unused buf config for gogoprotobuf Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add reminder for if we migrate fully to buf Signed-off-by: Thane Thomson <connect@thanethomson.com> * Restore protopackage script for #8065 Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix permissions on protopackage script Signed-off-by: Thane Thomson <connect@thanethomson.com> * Update contributing guidelines to show building of protos using buf Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix breaking changes check and add disclaimer Signed-off-by: Thane Thomson <connect@thanethomson.com> * Expand on contributing guidelines for clarity Signed-off-by: Thane Thomson <connect@thanethomson.com> * Re-remove old proto workflows Signed-off-by: Thane Thomson <connect@thanethomson.com> * Add buf-based proto linting workflow in CI Signed-off-by: Thane Thomson <connect@thanethomson.com> * Superficially reorder proto targets Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix proto lints Signed-off-by: Thane Thomson <connect@thanethomson.com> * Fix GA workflow YAML indentation Signed-off-by: Thane Thomson <connect@thanethomson.com> * 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 <connect@thanethomson.com> * Temporarily disable markdown link checker Signed-off-by: Thane Thomson <connect@thanethomson.com> * Remove gogo protos - superseded by version from buf registry Signed-off-by: Thane Thomson <connect@thanethomson.com>pull/8114/head
@ -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' |
@ -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 |
@ -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 }} |
@ -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' |
@ -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: | plugins: | ||||
# The name of the plugin. | |||||
- name: gogofaster | - 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 |
@ -0,0 +1,3 @@ | |||||
version: v1 | |||||
directories: | |||||
- proto |
@ -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/ |
@ -0,0 +1,7 @@ | |||||
# Generated by buf. DO NOT EDIT. | |||||
version: v1 | |||||
deps: | |||||
- remote: buf.build | |||||
owner: gogo | |||||
repository: protobuf | |||||
commit: 4df00b267f944190a229ce3695781e99 |
@ -1,6 +1,8 @@ | |||||
syntax = "proto3"; | syntax = "proto3"; | ||||
package tendermint.libs.bits; | package tendermint.libs.bits; | ||||
option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; | |||||
message BitArray { | message BitArray { | ||||
int64 bits = 1; | int64 bits = 1; | ||||
repeated uint64 elems = 2; | repeated uint64 elems = 2; | ||||
@ -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} |
@ -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; | |||||
} |