1+ #! /bin/bash
2+ OS=$( echo ` uname` | tr ' [:upper:]' ' [:lower:]' )
3+ ARCH=$( uname -m)
4+ BRANCH_NAME=" v1.7.0"
5+
6+ # Proto buf generation
7+ APPCALLBACK=" appcallback"
8+ COMMON=" common"
9+ DAPR=" dapr"
10+ RUNTIME=" runtime"
11+ GOOGLE_ANY=" runtime"
12+
13+ # Path to store output
14+ PATH_ROOT=$( pwd)
15+ # PATH_PROTO="$PATH_ROOT/src/grpc"
16+ # PATH_PROTO_DAPR="$PATH_PROTO/dapr/proto"
17+ # SRC="./src/grpc"
18+
19+ # Http request CLI
20+ HTTP_REQUEST_CLI=curl
21+
22+ # Make sure curl or wget are installed
23+ prerequisiteCheckHttpRequestCLI () {
24+ if type " curl" > /dev/null; then
25+ HTTP_REQUEST_CLI=curl
26+ elif type " wget" > /dev/null; then
27+ HTTP_REQUEST_CLI=wget
28+ else
29+ echo " Either curl or wget is required"
30+ exit 1
31+ fi
32+ }
33+
34+ prerequisiteCheckProtobuf () {
35+ if ! type " protoc" > /dev/null; then
36+ echo " protoc is not installed, trying to install"
37+ sudo apt update
38+ sudo apt install -y protobuf-compiler
39+ protoc --version
40+
41+ prerequisiteCheckProtobuf
42+ else
43+ echo " protoc ($( protoc --version) ) installed"
44+ fi
45+ }
46+
47+ downloadFile () {
48+ SRC=$1
49+ DST=$2
50+
51+ # Ensure target path exists
52+ mkdir -p $( dirname $DST )
53+
54+ # Download the file
55+ echo " [$HTTP_REQUEST_CLI ] Downloading $1 ..."
56+ if [ " $HTTP_REQUEST_CLI " == " curl" ]; then
57+ curl -SsL " $SRC " -o " $DST "
58+ else
59+ wget -q -P " $SRC " " $DST "
60+ fi
61+ echo " [$HTTP_REQUEST_CLI ] Saved to $DST "
62+ }
63+
64+ generateGrpc () {
65+ PATH_PROTO=$1
66+ PATH_FILE=$2
67+
68+ echo " [protoc] Generating RPC for $PATH_PROTO /$PATH_FILE "
69+
70+ # Tools to be installed by npm (see package.json)
71+ # npm install grpc-tools --save-dev
72+ # npm install grpc_tools_node_protoc_ts --save-dev
73+ PROTOC_GEN_TS_PATH=" ${PATH_ROOT} /node_modules/.bin/protoc-gen-ts"
74+ PROTOC_GEN_GRPC_PATH=" ${PATH_ROOT} /node_modules/.bin/grpc_tools_node_protoc_plugin"
75+
76+ # Note: we specify --proto_path to show where we should start searching from. If we use import it will start from this path
77+ # this is why PATH_PROTO != PATH_PROTO_DAPR; PATH_PROTO_DAPR is where we save our proto files while the other is the namespace
78+ protoc \
79+ --proto_path=" ${PATH_PROTO} " \
80+ --plugin=" protoc-gen-ts=${PROTOC_GEN_TS_PATH} " \
81+ --plugin=protoc-gen-grpc=${PROTOC_GEN_GRPC_PATH} \
82+ --js_out=" import_style=commonjs,binary:$PATH_PROTO " \
83+ --ts_out=" grpc_js:$PATH_PROTO " \
84+ --grpc_out=" grpc_js:$PATH_PROTO " \
85+ " $PATH_PROTO /$PATH_FILE "
86+ }
87+
88+ fail_trap () {
89+ result=$?
90+ if [ $result != 0 ]; then
91+ echo " Failed to generate gRPC interface and proto buf: $ret_val "
92+ fi
93+ cleanup
94+ exit $result
95+ }
96+
97+ cleanup () {
98+ find $PATH_PROTO -type f -name ' *.proto' -delete
99+ rm -rf protoc
100+ rm -f protoc.zip
101+ }
102+
103+ generateGrpcSuccess () {
104+ echo -e " \ngRPC interface and proto buf generated successfully!"
105+ }
106+
107+ # -----------------------------------------------------------------------------
108+ # main
109+ # -----------------------------------------------------------------------------
110+ # trap "fail_trap" EXIT
111+
112+ echo " Checking Dependencies"
113+ prerequisiteCheckProtobuf
114+ prerequisiteCheckHttpRequestCLI
115+
116+ echo " "
117+ echo " Removing old Proto Files"
118+ rm -rf " $PATH_ROOT /src/proto"
119+ mkdir -p " $PATH_ROOT /src/proto"
120+
121+ echo " "
122+ echo " Downloading latest Dapr gRPC files"
123+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/common/v1/common.proto" " $PATH_ROOT /src/proto/dapr/proto/common/v1/common.proto"
124+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/internals/v1/apiversion.proto" " $PATH_ROOT /src/proto/dapr/proto/internals/v1/apiversion.proto"
125+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/internals/v1/service_invocation.proto" " $PATH_ROOT /src/proto/dapr/proto/internals/v1/service_invocation.proto"
126+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/internals/v1/status.proto" " $PATH_ROOT /src/proto/dapr/proto/internals/v1/status.proto"
127+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/operator/v1/operator.proto" " $PATH_ROOT /src/proto/dapr/proto/operator/v1/operator.proto"
128+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/placement/v1/placement.proto" " $PATH_ROOT /src/proto/dapr/proto/placement/v1/placement.proto"
129+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/runtime/v1/appcallback.proto" " $PATH_ROOT /src/proto/dapr/proto/runtime/v1/appcallback.proto"
130+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/runtime/v1/dapr.proto" " $PATH_ROOT /src/proto/dapr/proto/runtime/v1/dapr.proto"
131+ downloadFile " https://raw.githubusercontent.com/dapr/dapr/$BRANCH_NAME /dapr/proto/sentry/v1/sentry.proto" " $PATH_ROOT /src/proto/dapr/proto/sentry/v1/sentry.proto"
132+
133+ echo " "
134+ echo " Downloading latest Google Protobuf gRPC files"
135+ downloadFile " https://raw.githubusercontent.com/protocolbuffers/protobuf/master/src/google/protobuf/any.proto" " $PATH_ROOT /src/proto/google/protobuf/any.proto"
136+ downloadFile " https://raw.githubusercontent.com/protocolbuffers/protobuf/master/src/google/protobuf/empty.proto" " $PATH_ROOT /src/proto/google/protobuf/empty.proto"
137+
138+ echo " "
139+ echo " Compiling gRPC files"
140+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/common/v1/common.proto"
141+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/internals/v1/apiversion.proto"
142+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/internals/v1/service_invocation.proto"
143+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/internals/v1/status.proto"
144+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/operator/v1/operator.proto"
145+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/placement/v1/placement.proto"
146+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/runtime/v1/appcallback.proto"
147+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/runtime/v1/dapr.proto"
148+ generateGrpc " $PATH_ROOT /src/proto" " dapr/proto/sentry/v1/sentry.proto"
149+
150+ generateGrpc " $PATH_ROOT /src/proto" " google/protobuf/any.proto"
151+ generateGrpc " $PATH_ROOT /src/proto" " google/protobuf/empty.proto"
152+
153+
154+ echo " "
155+ echo " DONE"
156+
157+ # cleanup
158+
159+ generateGrpcSuccess
0 commit comments