89 lines
2.3 KiB
Bash
89 lines
2.3 KiB
Bash
#!/bin/bash
|
||
set -e
|
||
|
||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
||
RPC_ROOT="${SCRIPT_DIR}/.."
|
||
THIRD_PARTY="${RPC_ROOT}/../pkg/third_party"
|
||
LOG_FILE="${SCRIPT_DIR}/gen-rpc.log"
|
||
|
||
exec > >(tee "${LOG_FILE}") 2>&1
|
||
|
||
function gen_one() {
|
||
local svc="$1"
|
||
echo "===== Processing ${svc} ====="
|
||
|
||
PROTO="${RPC_ROOT}/${svc}/${svc}.proto"
|
||
# pb输出目录,rpc目录下
|
||
RPC_SVC_DIR="${RPC_ROOT}/${svc}"
|
||
PB_OUT="${RPC_SVC_DIR}/pb"
|
||
# zrpc直接输出到services/${svc}
|
||
ZRPC_OUT="${RPC_ROOT}/../services/${svc}"
|
||
|
||
mkdir -p "${PB_OUT}"
|
||
mkdir -p "${ZRPC_OUT}/internal/server"
|
||
|
||
# 关键:只删除server.go,logic、dao、etc全部保留不动
|
||
rm -f "${ZRPC_OUT}/internal/server/${svc}server.go"
|
||
|
||
goctl rpc protoc "${PROTO}" \
|
||
--proto_path="${THIRD_PARTY}" \
|
||
--proto_path="${RPC_ROOT}" \
|
||
--module=lone-services \
|
||
--go_out="${PB_OUT}" \
|
||
--go-grpc_out="${PB_OUT}" \
|
||
--go_opt=M"${svc}/${svc}.proto"="./" \
|
||
--go-grpc_opt=M"${svc}/${svc}.proto"="./" \
|
||
--zrpc_out="${ZRPC_OUT}" \
|
||
--style=goZero
|
||
|
||
# rm -rf "${PB_OUT}/lone-services"
|
||
|
||
# 清理rpc目录中goctl意外生成的垃圾(etc/internal/server/client等),只保留proto/pb
|
||
# rm -rf "${RPC_SVC_DIR:?}/etc"
|
||
# rm -rf "${RPC_SVC_DIR:?}/internal"
|
||
# rm -rf "${RPC_SVC_DIR:?}/server"
|
||
# rm -rf "${RPC_SVC_DIR:?}/${svc}Client"
|
||
# rm -f "${RPC_SVC_DIR:?}/${svc}.go"
|
||
|
||
protoc "${PROTO}" \
|
||
-I"${THIRD_PARTY}" \
|
||
-I"${RPC_ROOT}" \
|
||
--include_imports \
|
||
--descriptor_set_out="${RPC_SVC_DIR}/${svc}.pb"
|
||
|
||
echo "===== Completed ${svc} ====="
|
||
echo
|
||
}
|
||
|
||
function scan_all_services() {
|
||
local services=()
|
||
for dir in "${RPC_ROOT}"/*/; do
|
||
svc=$(basename "${dir%/}")
|
||
proto_file="${RPC_ROOT}/${svc}/${svc}.proto"
|
||
if [[ -f "${proto_file}" ]]; then
|
||
services+=("${svc}")
|
||
fi
|
||
done
|
||
echo "${services[@]}"
|
||
}
|
||
|
||
ALL_SERVICES=($(scan_all_services))
|
||
|
||
if [ $# -ge 1 ]; then
|
||
for svc in "$@"; do
|
||
proto_file="${RPC_ROOT}/${svc}/${svc}.proto"
|
||
if [[ ! -f "${proto_file}" ]]; then
|
||
echo "[ERROR] rpc service [${svc}] not found, missing proto file"
|
||
exit 1
|
||
fi
|
||
gen_one "${svc}"
|
||
done
|
||
else
|
||
for svc in "${ALL_SERVICES[@]}"; do
|
||
gen_one "${svc}"
|
||
done
|
||
echo "All rpc code & apisix descriptor generated finished"
|
||
if [ -t 0 ]; then
|
||
read -r -p "Press Enter to exit..."
|
||
fi
|
||
fi |