53 lines
2.0 KiB
Bash
53 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
if [[ $# -ne 1 ]]; then
|
|
echo "usage: $0 <module>" >&2
|
|
echo "example: $0 passport" >&2
|
|
exit 2
|
|
fi
|
|
|
|
readonly SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
readonly WORKSPACE_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
|
|
readonly MODULE_NAME="$1"
|
|
|
|
mapfile -t MODULE_DIRS < <(find "${WORKSPACE_ROOT}/module" -mindepth 2 -maxdepth 2 -type d -name "${MODULE_NAME}" -print)
|
|
if [[ ${#MODULE_DIRS[@]} -ne 1 ]]; then
|
|
echo "error: expected one module named '${MODULE_NAME}', found ${#MODULE_DIRS[@]}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
readonly MODULE_DIR="${MODULE_DIRS[0]}"
|
|
readonly PROTO_DIR="${MODULE_DIR}/proto"
|
|
readonly PB_DIR="${MODULE_DIR}/pb"
|
|
readonly MODULE_REL="${MODULE_DIR#${WORKSPACE_ROOT}/}"
|
|
readonly DOCS_DIR="sdk/docs/${MODULE_NAME}"
|
|
readonly DOCS_GO_DIR="sdk/docs/client/golang/${MODULE_NAME}"
|
|
readonly DOCS_TS_DIR="sdk/docs/client/typescript/${MODULE_NAME}"
|
|
readonly CLIENT_GO_DIR="sdk/client/golang/${MODULE_NAME}"
|
|
readonly CLIENT_TS_DIR="sdk/client/typescript/${MODULE_NAME}"
|
|
[[ -d "${PROTO_DIR}" ]] || { echo "error: ${PROTO_DIR} does not exist" >&2; exit 1; }
|
|
mapfile -t PROTO_FILES < <(find "${PROTO_DIR}" -maxdepth 1 -type f -name '*.proto' -print | sort)
|
|
(( ${#PROTO_FILES[@]} > 0 )) || { echo "error: no proto files found in ${PROTO_DIR}" >&2; exit 1; }
|
|
|
|
cd -- "${WORKSPACE_ROOT}"
|
|
mkdir -p "${MODULE_REL}/pb"
|
|
mkdir -p \
|
|
"${DOCS_DIR}" "${DOCS_GO_DIR}" "${DOCS_TS_DIR}" \
|
|
"${CLIENT_GO_DIR}" "${CLIENT_TS_DIR}"
|
|
protoc \
|
|
--proto_path="${MODULE_REL}/proto" \
|
|
--go_out="paths=source_relative:${MODULE_REL}/pb" \
|
|
--go_out="paths=source_relative:sdk/client/golang/${MODULE_NAME}" \
|
|
--go-grpc_out="paths=source_relative:${MODULE_REL}/pb" \
|
|
--go-grpc_out="paths=source_relative:sdk/client/golang/${MODULE_NAME}" \
|
|
--grpc-gateway_out="paths=source_relative,generate_unbound_methods=true:${MODULE_REL}/pb" \
|
|
--ts_out="sdk/client/typescript" \
|
|
--markdown_out="paths=source_relative:${DOCS_DIR}" \
|
|
"${MODULE_REL}/proto/"*.proto
|
|
|
|
(cd -- "${MODULE_REL}" && protoc \
|
|
--proto_path=proto \
|
|
--slc_out=./ \
|
|
proto/*.proto)
|