-
Notifications
You must be signed in to change notification settings - Fork 69
feat(bazel): detach spring bazel rules #1065
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
5bd637e
d67df67
5327150
abb931d
6df1644
767fee9
0ba426a
2310c81
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
# Copyright 2022 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") | ||
diegomarquezp marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
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): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I suppose this is derived from There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh, we indeed need There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. So, the other option is There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is probably not in scope now, but once SpringCodeGen decide to support both |
||
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 = {} | ||
|
||
diegomarquezp marked this conversation as resolved.
Show resolved
Hide resolved
|
||
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("@gapic_generator_java//: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 | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// Copyright 2022 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 | ||
// | ||
// http://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. | ||
|
||
package com.google.api.generator.spring; | ||
|
||
import com.google.api.generator.ProtoRegistry; | ||
import com.google.protobuf.ExtensionRegistry; | ||
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest; | ||
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse; | ||
import java.io.IOException; | ||
|
||
public class Main { | ||
public static void main(String[] args) throws IOException { | ||
ExtensionRegistry registry = ExtensionRegistry.newInstance(); | ||
ProtoRegistry.registerAllExtensions(registry); | ||
CodeGeneratorRequest request = CodeGeneratorRequest.parseFrom(System.in, registry); | ||
CodeGeneratorResponse springResponse = SpringGenerator.generateSpring(request); | ||
springResponse.writeTo(System.out); | ||
} | ||
} |
Uh oh!
There was an error while loading. Please reload this page.