#!/usr/bin/env bash set -Eeuo pipefail if [[ $# -ne 1 ]]; then echo "usage: $0 " >&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)