This pull request updates the `protocgen.sh` script to insert the `go_package` option to all of the downloaded proto files. A related pull request into the spec repo removes this options from the .proto files: https://github.com/tendermint/spec/pull/358 This pull requests, along with the related spec PR, aim to move the creation of the `tendermintdev/docker-build-proto` container into the spec repo. This change also relies on several fixes to that container that are made in the PR into the spec repo.pull/7289/head
@ -1,51 +0,0 @@ | |||||
name: Build & Push TM Proto Builder | |||||
on: | |||||
pull_request: | |||||
paths: | |||||
- "tools/proto/*" | |||||
push: | |||||
branches: | |||||
- master | |||||
paths: | |||||
- "tools/proto/*" | |||||
schedule: | |||||
# run this job once a month to recieve any go or buf updates | |||||
- cron: "* * 1 * *" | |||||
jobs: | |||||
build: | |||||
runs-on: ubuntu-latest | |||||
steps: | |||||
- uses: actions/checkout@v2.4.0 | |||||
- name: Prepare | |||||
id: prep | |||||
run: | | |||||
DOCKER_IMAGE=tendermintdev/docker-build-proto | |||||
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: Login to DockerHub | |||||
uses: docker/login-action@v1.10.0 | |||||
with: | |||||
username: ${{ secrets.DOCKERHUB_USERNAME }} | |||||
password: ${{ secrets.DOCKERHUB_TOKEN }} | |||||
- name: Publish to Docker Hub | |||||
uses: docker/build-push-action@v2.7.0 | |||||
with: | |||||
context: ./tools/proto | |||||
file: ./tools/proto/Dockerfile | |||||
push: ${{ github.event_name != 'pull_request' }} | |||||
tags: ${{ steps.prep.outputs.tags }} |
@ -1,13 +0,0 @@ | |||||
# The version of the generation template. | |||||
# Required. | |||||
# The only currently-valid value is v1beta1. | |||||
version: v1beta1 | |||||
# The plugins to run. | |||||
plugins: | |||||
# The name of the plugin. | |||||
- name: gogofaster | |||||
# The the relative output directory. | |||||
out: proto | |||||
# Any options to provide to the plugin. | |||||
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 |
@ -1,16 +0,0 @@ | |||||
version: v1beta1 | |||||
build: | |||||
roots: | |||||
- proto | |||||
- third_party/proto | |||||
lint: | |||||
use: | |||||
- BASIC | |||||
- FILE_LOWER_SNAKE_CASE | |||||
- UNARY_RPC | |||||
ignore: | |||||
- gogoproto | |||||
breaking: | |||||
use: | |||||
- FILE |
@ -1,39 +1,44 @@ | |||||
#!/usr/bin/env bash | #!/usr/bin/env bash | ||||
set -euo pipefail | |||||
set -eo 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} | : ${VERS:=master} | ||||
URL_PATH=archive/ | |||||
if [[ VERS -ne master ]]; then | |||||
URL_PATH=archive/refs/tags/v | |||||
fi | |||||
# Edit this line to clone your branch, if you are modifying protobuf files | |||||
curl -qL "https://github.com/tendermint/spec/${URL_PATH}${VERS}.tar.gz" | tar -xjf - spec-"$VERS"/proto/ | |||||
echo "fetching proto files" | |||||
cp -r ./spec-"$VERS"/proto/tendermint/** ./proto/tendermint | |||||
# 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) | |||||
buf generate --path proto/tendermint | |||||
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 | mv ./proto/tendermint/abci/types.pb.go ./abci/types | ||||
echo "proto files have been generated" | |||||
echo "proto files have been compiled" | |||||
echo "removing copied files" | echo "removing copied files" | ||||
rm -rf ./proto/tendermint/abci | |||||
rm -rf ./proto/tendermint/blocksync/types.proto | |||||
rm -rf ./proto/tendermint/consensus/types.proto | |||||
rm -rf ./proto/tendermint/mempool/types.proto | |||||
rm -rf ./proto/tendermint/p2p/types.proto | |||||
rm -rf ./proto/tendermint/p2p/conn.proto | |||||
rm -rf ./proto/tendermint/p2p/pex.proto | |||||
rm -rf ./proto/tendermint/statesync/types.proto | |||||
rm -rf ./proto/tendermint/types/block.proto | |||||
rm -rf ./proto/tendermint/types/evidence.proto | |||||
rm -rf ./proto/tendermint/types/params.proto | |||||
rm -rf ./proto/tendermint/types/types.proto | |||||
rm -rf ./proto/tendermint/types/validator.proto | |||||
rm -rf ./proto/tendermint/version/types.proto | |||||
rm -rf ./spec-"$VERS" | |||||
find ${OUTDIR}/proto/tendermint/ -name *.proto \ | |||||
| sed "s/$OUTDIR\/\(.*\)/\1/g" \ | |||||
| xargs -I {} rm {} | |||||
rm -rf ${OUTDIR} |
@ -0,0 +1,23 @@ | |||||
#!/usr/bin/sh | |||||
set -eo pipefail | |||||
# This script appends the "option go_package" proto option to the file located at $FNAME. | |||||
# This option specifies what the package will be named when imported by other packages. | |||||
# This option is not directly included in the proto files to allow the files to more easily | |||||
# be hosted in github.com/tendermint/spec and shared between other repos. | |||||
# If the option is already specified in the file, it will be replaced using the | |||||
# arguments passed to this script. | |||||
FNAME="${1:?missing required .proto filename}" | |||||
MODNAME=$(echo $2| sed 's/\//\\\//g') | |||||
PACKAGE="$(dirname $FNAME | sed 's/^\.\/\(.*\)/\1/g' | sed 's/\//\\\//g')" | |||||
if [[ ! -z "$3" ]]; then | |||||
PACKAGE="$(echo $3 | sed 's/\//\\\//g')" | |||||
fi | |||||
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 | |||||
fi |
@ -1,27 +0,0 @@ | |||||
FROM bufbuild/buf:latest as buf | |||||
FROM golang:1.14-alpine3.11 as builder | |||||
RUN apk add --update --no-cache build-base curl git upx && \ | |||||
rm -rf /var/cache/apk/* | |||||
ENV GOLANG_PROTOBUF_VERSION=1.3.1 \ | |||||
GOGO_PROTOBUF_VERSION=1.3.2 | |||||
RUN GO111MODULE=on go get \ | |||||
github.com/golang/protobuf/protoc-gen-go@v${GOLANG_PROTOBUF_VERSION} \ | |||||
github.com/gogo/protobuf/protoc-gen-gogo@v${GOGO_PROTOBUF_VERSION} \ | |||||
github.com/gogo/protobuf/protoc-gen-gogofaster@v${GOGO_PROTOBUF_VERSION} && \ | |||||
mv /go/bin/protoc-gen-go* /usr/local/bin/ | |||||
FROM alpine:edge | |||||
WORKDIR /work | |||||
RUN echo 'http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && \ | |||||
apk add --update --no-cache clang && \ | |||||
rm -rf /var/cache/apk/* | |||||
COPY --from=builder /usr/local/bin /usr/local/bin | |||||
COPY --from=buf /usr/local/bin /usr/local/bin |