bdledger-apis/grpc/scripts/gen.sh

116 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# check pb dir
pb_dir="$(cd "$(dirname $0)";pwd)/../pb"
if [ ! -d $pb_dir ]; then
echo "pb dir $pb_dir does not exist in grpc folder"
exit
fi
cd $pb_dir
# check protoc
which protoc > /dev/null
if [ $? -ne 0 ];then
echo "missing protoc" && exit
fi
gen_dir="$pb_dir/../gen"
pb_files="bdware/bdledger/api/*.proto"
emptypb_file="google/protobuf/empty.proto"
cmd=protoc
async_tag=""
# check all arguments
for aug in $@
do
if [ $aug == "-a" ]; then
async_tag="&"
fi
if [ $aug == "--async" ]; then
async_tag="&"
fi
if [ $aug == "go" ]; then
plugin=protoc-gen-go
which $plugin > /dev/null
if [ $? -ne 0 ];then
echo "missing plugin: $plugin" && exit
fi
vplugin=protoc-gen-govalidators
which $vplugin > /dev/null
if [ $? -ne 0 ];then
echo "missing plugin: $vplugin" && exit
fi
out="$gen_dir/go"
if [ ! -d $out ]; then
mkdir -p $out
fi
echo "Generating Go code"
$cmd \
--go_out=$out \
--go-grpc_out=$out \
$pb_files \
$async_tag
fi
if [ $aug == "gohttp" ]; then
plugin=protoc-gen-grpc-gateway
which $plugin > /dev/null
if [ $? -ne 0 ];then
echo "missing plugin: $plugin" && exit
fi
out="$gen_dir/go"
if [ ! -d $out ]; then
mkdir -p $out
fi
echo "Generating Go HTTP code"
$cmd \
--grpc-gateway_out=grpc_api_configuration=bdware/bdledger/api/grpc-gateway.yml,logtostderr=true:$out \
$pb_files \
$async_tag
fi
if [ $aug == "nodejs" ]; then
npmBinPath=$(npm bin)
jsCmd=$npmBinPath/grpc_tools_node_protoc
pluginPath=$npmBinPath/protoc-gen-ts
out="$gen_dir/nodejs"
if [ ! -d $out ]; then
mkdir -p $out
fi
echo "Generating Node.js code & TypeScript definitions"
$jsCmd \
--plugin=protoc-gen-ts=$pluginPath \
--js_out=import_style=commonjs,binary:$out \
--grpc_out=grpc_js:$out \
--ts_out=grpc_js:$out \
$pb_files $emptypb_file \
$async_tag
fi
if [ $aug == "docs" ]; then
plugin=protoc-gen-ts
plugin_path=$(which $plugin)
if [ $? -ne 0 ];then
echo "missing plugin: $plugin" && exit
fi
out="$pb_dir/../../docs"
if [ ! -d $out ]; then
mkdir -p $out
fi
echo "Generating documentations"
$cmd \
--doc_out=$out \
--doc_opt=html,apis.html \
$pb_files $emptypb_file \
$async_tag
$cmd \
--doc_out=$out \
--doc_opt=markdown,apis.md \
$pb_files $emptypb_file \
$async_tag
$cmd \
--doc_out=$out \
--doc_opt=json,apis.json \
$pb_files $emptypb_file \
$async_tag
fi
done