blob: 5581e0f378ba4d1c7a8f58e8da6f98f8adc86fca [file] [log] [blame]
#!/bin/bash -e
# Run gapic-generator-java as a protoc plugin.
# Usage example here:
: << 'EXAMPLE'
DIR=~/dev/googleapis/google/showcase/v1beta1
./run.sh --g ~/dev/googleapis --p "$DIR"-s "$DIR/showcase_grpc_service_config.json"
EXAMPLE
source gbash.sh
# Required flags.
DEFINE_string --alias=p protos '' 'Path to the protos to generate.'
DEFINE_string --alias=g googleapis '' 'Path to the googleapis directory.'
DEFINE_string --alias=s service_config '' 'Path to the JSON service config'
# Optional flags.
DEFINE_bool --alias=c use_cached false 'If true, does not rebuild the plugin.'
DEFINE_string --alias=o out '/tmp/test' 'Output directory'
DEFINE_string gapic_config '' 'Path to the config ending in gapic.yaml. Optional'
gbash::init_google "$@"
# Variables.
PROTOC_INCLUDE_DIR=/usr/local/include/google/protobuf
function echo_error {
BOLD="\e[1m"
UNSET="\e[0m"
WHITE="\e[97m"
RED="\e[91m"
BACK_MAGENTA="\e[45m"
BACK_BLUE="\e[44m"
BACK_RED="\e[41m"
echo -e "$BOLD $BACK_BLUE $WHITE $1 $UNSET"
}
function echo_success {
BOLD="\e[1m"
UNSET="\e[0m"
WHITE="\e[97m"
BACK_GREEN="\e[42m"
BACK_BLUE="\e[44m"
echo -e "$BOLD $BACK_BLUE $WHITE $BACK_GREEN $1 $UNSET"
}
# Flag check.
if [[ -z "${FLAGS_protos}" ]]
then
echo_error "Required flag --protos must be set."
exit 1
fi
if [[ -z "${FLAGS_googleapis}" ]]
then
echo_error "Required flag --googleapis must be set."
exit 1
fi
# Build if needed.
if [[ "${FLAGS_use_cached}" == 0 ]] || [[ ! -f bazel-bin/protoc-gen-java_gapic ]]
then
echo_success "Rebuilding the microgenerator..."
bazel build :protoc-gen-java_gapic
if [[ $? -ne 0 ]]
then
echo_error "Build failed."
exit 1
fi
echo_success "Done"
fi
# Key values are synced to rules_java_gapic/java_gapic.bzl.
SERVICE_CONFIG_OPT=""
if [ -n "$FLAGS_service_config" ]
then
SERVICE_CONFIG_OPT="grpc-service-config=$FLAGS_service_config"
fi
GAPIC_CONFIG_OPT=""
if [ -n "$FLAGS_gapic_config" ]
then
GAPIC_CONFIG_OPT="gapic-config=$FLAGS_gapic_config"
fi
# Run protoc.
protoc -I="${PROTOC_INCLUDE_DIR}" -I="${FLAGS_googleapis}" -I="${FLAGS_protos}" \
-I="${FLAGS_googleapis}/google/longrunning" \
--include_source_info \
--plugin=bazel-bin/protoc-gen-java_gapic ${FLAGS_protos}/*.proto \
--java_gapic_out="${FLAGS_out}" \
--java_gapic_opt="${SERVICE_CONFIG_OPT},${GAPIC_CONFIG_OPT}" \
--experimental_allow_proto3_optional
echo_success "Output files written to ${FLAGS_out}"