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