github.com/erda-project/erda-infra@v1.0.9/providers/component-protocol/protobuf/proto-go/build.sh (about) 1 #!/bin/bash 2 3 set -o errexit -o pipefail 4 5 # check parameters and print usage if need 6 usage() { 7 echo "protoc.sh ACTION" 8 echo "ACTION: " 9 echo " build build proto to go files." 10 echo " clean clean result files of protocol building." 11 exit 1 12 } 13 if [ -z "$1" ]; then 14 usage 15 fi 16 17 #PACKAGE_PATH=$(sed -n '/^module \(.*\)/p' go.mod) 18 #PACKAGE_PATH=${PACKAGE_PATH#"module "} 19 PACKAGE_PATH="github.com/erda-project/erda-infra/providers/component-protocol/protobuf/proto-go" 20 21 # build protocol 22 build_protocol() { 23 BASE_PATH="../proto" 24 if [ -n "${MODULE_PATH}" ]; then 25 BASE_PATH="${BASE_PATH}/${MODULE_PATH}" 26 echo "base path: $BASE_PATH" 27 unset GEN_ALL_IMPORTS 28 fi 29 MODULES=$(find "${BASE_PATH}" -type d); 30 for path in ${MODULES}; do 31 HAS_PROTO_FILE=$(eval echo $(bash -c "find "${path}" -maxdepth 1 -name *.proto 2>/dev/null" | wc -l)); 32 if [ ${HAS_PROTO_FILE} -gt 0 ]; then 33 if [ -z "$(echo ${path#../proto})" ]; then 34 continue; # skip ../proto 35 fi 36 MODULE_PATH=${path#../proto/}; 37 echo "build module ${MODULE_PATH}"; 38 mkdir -p ${MODULE_PATH}/pb; 39 mkdir -p ${MODULE_PATH}/client; 40 gohub protoc protocol \ 41 --include=../proto \ 42 --msg_out="${MODULE_PATH}/pb" \ 43 --service_out="${MODULE_PATH}/pb" \ 44 --client_out="${MODULE_PATH}/client" \ 45 --validate=true \ 46 --json=true \ 47 --json_opt=emit_defaults=true \ 48 --json_opt=allow_unknown_fields=true \ 49 ${path}/*.proto 50 if [ -n "$GEN_ALL_IMPORTS" ]; then 51 echo "_ \"${PACKAGE_PATH}/${MODULE_PATH}/pb\"" >> all.go 52 fi 53 fi; 54 done; 55 echo ""; 56 echo "build all proto successfully !"; 57 } 58 59 # clean result files of building 60 clean_result() { 61 MODULES=$(find "../proto" -type d); 62 for path in ${MODULES}; do 63 HAS_PROTO_FILE=$(eval echo $(bash -c "find "${path}" -maxdepth 1 -name *.proto 2>/dev/null" | wc -l)); 64 if [ ${HAS_PROTO_FILE} -gt 0 ]; then 65 if [ -z "$(echo ${path#../proto})" ]; then 66 continue; # skip ../proto 67 fi 68 MODULE_PATH=${path#../proto/}; 69 rm -rf ${MODULE_PATH} 70 fi; 71 done; 72 rm -rf all.go 73 } 74 75 case "$1" in 76 "build") 77 build_protocol 78 ;; 79 "clean") 80 clean_result 81 ;; 82 *) 83 usage 84 esac