Comments (4)
@achew22 No, I don't have a good example since I am just trying Bazel in a small project which does not use grpc-gateway.
But I agree that it would be useful if we have a Skylark macro like grpc_gateway_library
or grpc_gateway_binary
from grpc-gateway.
The following is from a project that's not opensourced (yet), so I can't point to the exact rules. One limiting factor is that I also have custom Go rules (based on Kythe's rules) and haven't gotten around to reworking Bazel's Go rules (see bazelbuild/bazel#828). Because the build rule for //vendor:protoc-gen-gprc-gateway
is too dependent on custom Go rules that are too fragile and messy to be shared, I'm not sharing them here.
Instead I'll try to describe my approach enough to get interested people started.
This is my genrule()
in the BUILD
file for the Bazel package containing file scheduler.proto
:
genrule(
name = "scheduler_pb_gw",
srcs = [
"scheduler.proto",
"//vendor:github.com/gengo/grpc-gateway/third_party/googleapis/google/api/annotations.proto",
"//vendor:github.com/gengo/grpc-gateway/third_party/googleapis/google/api/http.proto",
"//vendor:github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto"],
outs = ["scheduler.pb.gw.go"],
cmd = (
"$(location @protobuf//:protoc) " +
" --grpc-gateway_out=logtostderr=true:$$(dirname $@)" +
" -I$$(dirname $$(dirname $$(dirname $(location //vendor:github.com/gengo/grpc-gateway/third_party/googleapis/google/api/annotations.proto)))):$$(dirname $$(dirname $$(dirname $(location //vendor:github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto)))):." +
" --plugin=protoc-gen-grpc-gateway=$(location //vendor:protoc-gen-grpc-gateway)" +
" --proto_path=$$(dirname $(location scheduler.proto)):$$(dirname \"$@\")" +
" $(location scheduler.proto); mv \"$$(dirname \"$@\")\"/scheduler/\"$$(basename \"$@\")\" \"$@\""),
message = "Processing proto file with grpc-gateway",
tools = [
"@protobuf//:protoc",
"//vendor:protoc-gen-grpc-gateway",
]
)
The WORKSPACE
defines external repository protobuf
. While ordinarily one would specify a git_repository()
rule, I am already using vendoring + externals:
local_repository(
name = "protobuf",
path = __workspace_dir__ + "/vendor/github.com/google/protobuf",
)
I'm using a genrule()
here because it was easier than writing a proper Skylark rule. Even this genrule()
is quite hacky.
from grpc-gateway.
@ivucica Thank you for sharing that.
Although I'm not going to write the skylark rule by myself very soon, but it is definitely on my to-do list.
Also I'm happy to accept PRs for the rule. In both cases, your genrule
will be quite helpful.
from grpc-gateway.
I've posted a preliminary implementation of grpc_gateway_proto_library in rules_protobuf that:
- builds the grpc-gateway runtime and associated libraries,
- builds the protoc-gen-grpc-gateway plugin,
- invokes the plugin
- compiles the *.pb.gw.go files into a go_library
Hopefully we can accomplish easy grpc-gateway support in bazel. Feedback or contributions welcome.
from grpc-gateway.
Related Issues (20)
- Internal comments not stripped from enum query parameter's description HOT 2
- Fetching request body in the customErrorHandler middleware HOT 5
- Buf - Wrong import in grpcgateway HOT 4
- Document about how to mark an arrray field as required in an extra openapi config file? HOT 1
- multi-folder not generating correct swagger file HOT 2
- [protoc-gen-openapiv2] Option to disable setting default values for enums without omitting it from the list of values HOT 3
- openapiv2_tag.name does not work HOT 4
- Grpc Gateway discards Any typed fields HOT 2
- Populating query param semantics changed since v2.15.0 HOT 3
- When the body is set to a oneof field, other fields in the same group are included as query.
- For a field of type google.protobuf.Empty, FieldMaskFromRequestBody does not generate any fieldmask HOT 3
- generate swagger schema title and description failed HOT 2
- Issue with importing "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway" HOT 3
- genopenapi: Stable openapi names for nested types HOT 1
- snake_case response HOT 1
- api_visibility doesn't transitively apply to rpc request/response messages HOT 2
- protoc-gen-grpc-gateway and protoc-gen-openapiv2 return incorrect version HOT 1
- Dependency on google.golang.org/grpc/health/grpc_health_v1 conflicts with custom proto marshallers HOT 5
- JSONPb marshaler doesn't use indent on non proto fields
- WriteHeader is not called on 200s HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from grpc-gateway.