1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/usr/bin/env bash
- #
- # Generate all etcd protobuf bindings.
- # Run from repository root.
- #
- set -e
- if ! [[ "$0" =~ scripts/genproto.sh ]]; then
- echo "must be run from repository root"
- exit 255
- fi
- if [[ $(protoc --version | cut -f2 -d' ') != "3.7.1" ]]; then
- echo "could not find protoc 3.7.1, is it installed + in PATH?"
- exit 255
- fi
- # directories containing protos to be built
- DIRS="./wal/walpb ./etcdserver/etcdserverpb ./snap/snappb ./raft/raftpb ./mvcc/mvccpb ./lease/leasepb ./auth/authpb ./etcdserver/api/v3lock/v3lockpb ./etcdserver/api/v3election/v3electionpb"
- # disable go mod
- export GO111MODULE=off
- # exact version of packages to build
- GOGO_PROTO_SHA="1adfc126b41513cc696b209667c8656ea7aac67c"
- GRPC_GATEWAY_SHA="92583770e3f01b09a0d3e9bdf64321d8bebd48f2"
- SCHWAG_SHA="b7d0fc9aadaaae3d61aaadfc12e4a2f945514912"
- # set up self-contained GOPATH for building
- export GOPATH=${PWD}/gopath.proto
- export GOBIN=${PWD}/bin
- export PATH="${GOBIN}:${PATH}"
- ETCD_IO_ROOT="${GOPATH}/src/github.com/coreos/etcd"
- ETCD_ROOT="${ETCD_IO_ROOT}/etcd"
- GOGOPROTO_ROOT="${GOPATH}/src/github.com/gogo/protobuf"
- SCHWAG_ROOT="${GOPATH}/src/github.com/hexfusion/schwag"
- GOGOPROTO_PATH="${GOGOPROTO_ROOT}:${GOGOPROTO_ROOT}/protobuf"
- GRPC_GATEWAY_ROOT="${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway"
- function cleanup {
- # Remove the whole fake GOPATH which can really confuse go mod.
- rm -rf "${PWD}/gopath.proto"
- }
- cleanup
- trap cleanup EXIT
- mkdir -p "${ETCD_IO_ROOT}"
- ln -s "${PWD}" "${ETCD_ROOT}"
- echo "Installing gogo/protobuf..."
- GOGOPROTO_ROOT="$GOPATH/src/github.com/gogo/protobuf"
- # rm -rf $GOGOPROTO_ROOT
- mkdir -p $GOPATH/src/github.com/gogo
- pushd $GOPATH/src/github.com/gogo
- git clone https://github.com/gogo/protobuf.git
- popd
- pushd "${GOGOPROTO_ROOT}"
- git reset --hard HEAD
- make install
- popd
- echo "Installing grpc-ecosystem/grpc-gateway..."
- GRPC_GATEWAY_ROOT="$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway"
- # rm -rf $GRPC_GATEWAY_ROOT
- mkdir -p $GOPATH/src/github.com/grpc-ecosystem
- go get -v -d github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
- go get -v -d github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
- pushd $GOPATH/src/github.com/grpc-ecosystem
- rm -rf ./grpc-gateway
- git clone https://github.com/grpc-ecosystem/grpc-gateway.git
- popd
- pushd "${GRPC_GATEWAY_ROOT}"
- git reset --hard "${GRPC_GATEWAY_SHA}"
- go install -v ./protoc-gen-grpc-gateway
- go install -v ./protoc-gen-swagger
- popd
- for dir in ${DIRS}; do
- pushd "${dir}"
- protoc --gofast_out=plugins=grpc,import_prefix=github.com/coreos/:. -I=".:${GOGOPROTO_PATH}:${ETCD_IO_ROOT}:${GRPC_GATEWAY_ROOT}/third_party/googleapis" ./*.proto
- sed -i.bak -E "s/github\.com\/coreos\/(gogoproto|github\.com|golang\.org|google\.golang\.org)/\1/g" ./*.pb.go
- sed -i.bak -E 's/github\.com\/coreos\/(errors|fmt|io|context|math\/bits)/\1/g' ./*.pb.go
- sed -i.bak -E 's/import _ \"gogoproto\"//g' ./*.pb.go
- sed -i.bak -E 's/import fmt \"fmt\"//g' ./*.pb.go
- sed -i.bak -E 's/import _ \"github\.com\/coreos\/google\/api\"//g' ./*.pb.go
- sed -i.bak -E 's/import _ \"google\.golang\.org\/genproto\/googleapis\/api\/annotations\"//g' ./*.pb.go
- rm -f ./*.bak
- goimports -w ./*.pb.go
- popd
- done
|