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