spring-cloud-generator/java_gapic_spring.bzl (126 lines of code) (raw):

# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. load("@rules_gapic//:gapic.bzl", "proto_custom_library") def _java_gapic_spring_postprocess_srcjar_impl(ctx): gapic_srcjar = ctx.file.gapic_srcjar output_srcjar_name = ctx.label.name srcjar_name = output_srcjar_name + "_raw.srcjar" output_spring = ctx.outputs.spring formatter = ctx.executable.formatter output_dir_name = ctx.label.name output_dir_path = "%s/%s" % (output_spring.dirname, output_dir_name) script = """ WORKING_DIR=`pwd` cd $WORKING_DIR unzip -q {gapic_srcjar} unzip -q temp-codegen-spring.srcjar -d {output_dir_path} # This may fail if there are spaces and/or too many files (exceed max length of command length). {formatter} --replace $(find {output_dir_path} -type f -printf "%p ") # Spring source files. cd {output_dir_path} zip -r $WORKING_DIR/{output_srcjar_name}.srcjar ./ cd $WORKING_DIR mv $WORKING_DIR/{output_srcjar_name}.srcjar {output_spring} """.format( output_srcjar_name = output_srcjar_name, gapic_srcjar = gapic_srcjar.path, srcjar_name = srcjar_name, formatter = formatter, output_dir_name = output_dir_name, output_dir_path = output_dir_path, output_spring = output_spring.path, ) ctx.actions.run_shell( inputs = [gapic_srcjar], tools = [formatter], command = script, outputs = [output_spring], ) _java_gapic_spring_postprocess_srcjar = rule( attrs = { "gapic_srcjar": attr.label(mandatory = True, allow_single_file = True), "formatter": attr.label( default = Label("//:google_java_format_binary"), executable = True, cfg = "host", ), }, outputs = { "spring": "%{name}-spring.srcjar", }, implementation = _java_gapic_spring_postprocess_srcjar_impl, ) def java_gapic_spring_library( name, srcs, grpc_service_config = None, gapic_yaml = None, service_yaml = None, transport = None, **kwargs): library_name = name + "-spring" raw_srcjar_name = name + "_raw" _java_gapic_spring_srcjar( name = raw_srcjar_name, srcs = srcs, grpc_service_config = grpc_service_config, gapic_yaml = gapic_yaml, service_yaml = service_yaml, transport = transport, **kwargs ) _java_gapic_spring_postprocess_srcjar( name = name, gapic_srcjar = "%s.srcjar" % raw_srcjar_name, **kwargs ) def _java_gapic_spring_srcjar( name, srcs, grpc_service_config, gapic_yaml, service_yaml, transport, # Can be used to provide a java_library with a customized generator, # like the one which dumps descriptor to a file for future debugging. java_generator_name = "java_gapic_spring", **kwargs): file_args_dict = {} if grpc_service_config: file_args_dict[grpc_service_config] = "grpc-service-config" elif not transport or transport == "grpc": if "library" not in name: fail("Missing a gRPC service config file") if gapic_yaml: file_args_dict[gapic_yaml] = "gapic-config" if service_yaml: file_args_dict[service_yaml] = "api-service-config" opt_args = [] if transport: opt_args.append("transport=%s" % transport) # Produces the GAPIC metadata file if this flag is set. to any value. # Protoc invocation: --java_gapic_opt=metadata plugin_args = ["metadata"] proto_custom_library( name = name, deps = srcs, plugin = Label("@spring_cloud_generator//:protoc-gen-%s" % java_generator_name), plugin_args = plugin_args, plugin_file_args = {}, opt_file_args = file_args_dict, output_type = java_generator_name, output_suffix = ".srcjar", opt_args = opt_args, **kwargs )