go.etcd.io/etcd@v3.3.27+incompatible/scripts/genproto.sh (about) 1 #!/usr/bin/env bash 2 # 3 # Generate all etcd protobuf bindings. 4 # Run from repository root. 5 # 6 set -e 7 8 if ! [[ "$0" =~ scripts/genproto.sh ]]; then 9 echo "must be run from repository root" 10 exit 255 11 fi 12 13 if [[ $(protoc --version | cut -f2 -d' ') != "3.7.1" ]]; then 14 echo "could not find protoc 3.7.1, is it installed + in PATH?" 15 exit 255 16 fi 17 18 # directories containing protos to be built 19 DIRS="./wal/walpb ./etcdserver/etcdserverpb ./snap/snappb ./raft/raftpb ./mvcc/mvccpb ./lease/leasepb ./auth/authpb ./etcdserver/api/v3lock/v3lockpb ./etcdserver/api/v3election/v3electionpb" 20 21 # disable go mod 22 export GO111MODULE=off 23 24 # exact version of packages to build 25 GOGO_PROTO_SHA="1adfc126b41513cc696b209667c8656ea7aac67c" 26 GRPC_GATEWAY_SHA="92583770e3f01b09a0d3e9bdf64321d8bebd48f2" 27 SCHWAG_SHA="b7d0fc9aadaaae3d61aaadfc12e4a2f945514912" 28 29 # set up self-contained GOPATH for building 30 export GOPATH=${PWD}/gopath.proto 31 export GOBIN=${PWD}/bin 32 export PATH="${GOBIN}:${PATH}" 33 34 ETCD_IO_ROOT="${GOPATH}/src/github.com/coreos/etcd" 35 ETCD_ROOT="${ETCD_IO_ROOT}/etcd" 36 GOGOPROTO_ROOT="${GOPATH}/src/github.com/gogo/protobuf" 37 SCHWAG_ROOT="${GOPATH}/src/github.com/hexfusion/schwag" 38 GOGOPROTO_PATH="${GOGOPROTO_ROOT}:${GOGOPROTO_ROOT}/protobuf" 39 GRPC_GATEWAY_ROOT="${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway" 40 41 function cleanup { 42 # Remove the whole fake GOPATH which can really confuse go mod. 43 rm -rf "${PWD}/gopath.proto" 44 } 45 46 cleanup 47 trap cleanup EXIT 48 49 mkdir -p "${ETCD_IO_ROOT}" 50 ln -s "${PWD}" "${ETCD_ROOT}" 51 52 echo "Installing gogo/protobuf..." 53 GOGOPROTO_ROOT="$GOPATH/src/github.com/gogo/protobuf" 54 # rm -rf $GOGOPROTO_ROOT 55 mkdir -p $GOPATH/src/github.com/gogo 56 pushd $GOPATH/src/github.com/gogo 57 git clone https://github.com/gogo/protobuf.git 58 popd 59 pushd "${GOGOPROTO_ROOT}" 60 git reset --hard HEAD 61 make install 62 popd 63 64 echo "Installing grpc-ecosystem/grpc-gateway..." 65 GRPC_GATEWAY_ROOT="$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway" 66 # rm -rf $GRPC_GATEWAY_ROOT 67 mkdir -p $GOPATH/src/github.com/grpc-ecosystem 68 go get -v -d github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway 69 go get -v -d github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger 70 pushd $GOPATH/src/github.com/grpc-ecosystem 71 rm -rf ./grpc-gateway 72 git clone https://github.com/grpc-ecosystem/grpc-gateway.git 73 popd 74 pushd "${GRPC_GATEWAY_ROOT}" 75 git reset --hard "${GRPC_GATEWAY_SHA}" 76 go install -v ./protoc-gen-grpc-gateway 77 go install -v ./protoc-gen-swagger 78 popd 79 80 for dir in ${DIRS}; do 81 pushd "${dir}" 82 protoc --gofast_out=plugins=grpc,import_prefix=github.com/coreos/:. -I=".:${GOGOPROTO_PATH}:${ETCD_IO_ROOT}:${GRPC_GATEWAY_ROOT}/third_party/googleapis" ./*.proto 83 sed -i.bak -E "s/github\.com\/coreos\/(gogoproto|github\.com|golang\.org|google\.golang\.org)/\1/g" ./*.pb.go 84 sed -i.bak -E 's/github\.com\/coreos\/(errors|fmt|io|context|math\/bits)/\1/g' ./*.pb.go 85 sed -i.bak -E 's/import _ \"gogoproto\"//g' ./*.pb.go 86 sed -i.bak -E 's/import fmt \"fmt\"//g' ./*.pb.go 87 sed -i.bak -E 's/import _ \"github\.com\/coreos\/google\/api\"//g' ./*.pb.go 88 sed -i.bak -E 's/import _ \"google\.golang\.org\/genproto\/googleapis\/api\/annotations\"//g' ./*.pb.go 89 rm -f ./*.bak 90 goimports -w ./*.pb.go 91 popd 92 done