Skip to content

Commit 970a8ee

Browse files
Add grpc-web support (#252)
* Add 'executable' attribute to 'proto_dependency' rule * Add grpc-web support for js * Add grpc-web to routeguide example * Update README; add grpc-web to plugin list * Preparing #252 to merge
1 parent a95e6bc commit 970a8ee

21 files changed

Lines changed: 285 additions & 4 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,7 @@ artifact identifiers that follow a GitHub org/repo/plugin_name convention.
781781
| [grpc:grpc-go:protoc-gen-go-grpc](pkg/plugin/grpc/grpcgo/protoc-gen-go-grpc.go) |
782782
| [grpc:grpc-java:protoc-gen-grpc-java](pkg/plugin/grpc/grpcjava/protoc-gen-grpc-java.go) |
783783
| [grpc:grpc-node:protoc-gen-grpc-node](pkg/plugin/grpc/grpcnode/protoc-gen-grpc-node.go) |
784+
| [grpc:grpc-web:protoc-gen-grpc-web](pkg/plugin/grpc/grpcweb/protoc-gen-grpc-web.go) |
784785
| [gogo:protobuf:protoc-gen-combo](pkg/plugin/gogo/protobuf/protoc-gen-gogo.go) |
785786
| [gogo:protobuf:protoc-gen-gogo](pkg/plugin/gogo/protobuf/protoc-gen-gogo.go) |
786787
| [gogo:protobuf:protoc-gen-gogofast](pkg/plugin/gogo/protobuf/protoc-gen-gogo.go) |
@@ -804,6 +805,7 @@ artifact identifiers that follow a GitHub org/repo/rule_name convention.
804805
| [stackb:rules_proto:grpc_closure_js_library](pkg/rule/rules_closure/grpc_closure_js_library.go) |
805806
| [stackb:rules_proto:grpc_java_library](pkg/rule/rules_java/grpc_java_library.go) |
806807
| [stackb:rules_proto:grpc_nodejs_library](pkg/rule/rules_nodejs/grpc_nodejs_library.go) |
808+
| [stackb:rules_proto:grpc_web_js_library](pkg/rule/rules_nodejs/grpc_web_js_library.go) |
807809
| [stackb:rules_proto:grpc_py_library](pkg/rule/rules_python/grpc_py_library.go) |
808810
| [stackb:rules_proto:proto_cc_library](pkg/rule/rules_cc/proto_cc_library.go) |
809811
| [stackb:rules_proto:proto_closure_js_library](pkg/rule/rules_closure/proto_closure_js_library.go) |

WORKSPACE

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ load("//deps:grpc_node_deps.bzl", "grpc_node_deps")
5252

5353
grpc_node_deps()
5454

55+
load("//deps:grpc_web_deps.bzl", "grpc_web_deps")
56+
57+
grpc_web_deps()
58+
5559
load("//deps:ts_proto_deps.bzl", "ts_proto_deps")
5660

5761
ts_proto_deps()

cmd/depsgen/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ type ProtoDependencyInfo struct {
3434
BuildFileContent string
3535
BuildFileProtoMode string
3636
Deps []*ProtoDependencyInfo
37+
Executable bool
3738
Importpath string
3839
Label string
3940
Name string

cmd/depsgen/template.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ def {{ .Dep.Name }}():
3131
path = "{{ .Dep.Path }}",{{ end }}{{ if .Dep.PackageJson }}
3232
package_json = "{{ .Dep.PackageJson }}",{{ end }}{{ if .Dep.PackageLockJson }}
3333
package_lock_json = "{{ .Dep.PackageLockJson }}",{{ end }}{{ if .Dep.YarnLock }}
34-
yarn_lock = "{{ .Dep.YarnLock }}",{{ end }}{{ if .Dep.Sha256 }}
34+
yarn_lock = "{{ .Dep.YarnLock }}",{{ end }}{{ if .Dep.Executable }}
35+
executable = {{ if .Dep.Executable }}True{{ else }}False{{ end }},{{ end }}{{ if .Dep.Sha256 }}
3536
sha256 = "{{ .Dep.Sha256 }}",{{ end }}{{ if .Dep.StripPrefix }}
3637
strip_prefix = "{{ .Dep.StripPrefix }}",{{ end }}{{ if .Dep.YarnLock }}
3738
frozen_lockfile = {{ if .Dep.FrozenLockfile }}True{{ else }}False{{ end }},{{ end }}{{ if .Dep.PackageLockJson }}

deps/BUILD.bazel

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ depsgen(
8181
deps = ["//deps:com_github_grpc_grpc_node_packages_grpc_tools_src"],
8282
)
8383

84+
depsgen(
85+
name = "grpc_web",
86+
deps = [
87+
":com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_darwin_x86_64",
88+
":com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_linux_x86_64",
89+
":com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_windows_x86_64",
90+
],
91+
)
92+
8493
depsgen(
8594
name = "grpc_java",
8695
deps = ["//deps:io_grpc_grpc_java"],
@@ -506,6 +515,33 @@ proto_dependency(
506515
deps = ["build_bazel_rules_nodejs"],
507516
)
508517

518+
# URL: https://github.com/grpc/grpc-web/releases/tag/1.3.1
519+
proto_dependency(
520+
name = "com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_linux_x86_64",
521+
executable = True,
522+
repository_rule = "http_file",
523+
sha256 = "12d3cfefb22e077251e6d1fae2aeaafd7a66518898397c667ba69cdd1260e72a",
524+
urls = ["https://github.com/grpc/grpc-web/releases/download/1.3.1/protoc-gen-grpc-web-1.3.1-linux-x86_64"],
525+
)
526+
527+
# URL: https://github.com/grpc/grpc-web/releases/tag/1.3.1
528+
proto_dependency(
529+
name = "com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_darwin_x86_64",
530+
executable = True,
531+
repository_rule = "http_file",
532+
sha256 = "466ffe6d2096a2e09823ad02170a90a3e9f79d24094ec8ddcaf6c6d4e673aa2c",
533+
urls = ["https://github.com/grpc/grpc-web/releases/download/1.3.1/protoc-gen-grpc-web-1.3.1-darwin-x86_64"],
534+
)
535+
536+
# URL: https://github.com/grpc/grpc-web/releases/tag/1.3.1
537+
proto_dependency(
538+
name = "com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_windows_x86_64",
539+
executable = True,
540+
repository_rule = "http_file",
541+
sha256 = "f7f3d3b8ddcc7f0f8e432e744768682c070491fc1dcacb922343ec8f39c0d115",
542+
urls = ["https://github.com/grpc/grpc-web/releases/download/1.3.1/protoc-gen-grpc-web-1.3.1-windows-x86_64.exe"],
543+
)
544+
509545
filegroup(
510546
name = "all_files",
511547
srcs = [

deps/grpc_web_deps.bzl

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"""
2+
GENERATED FILE - DO NOT EDIT (created via @build_stack_rules_proto//cmd/depsgen)
3+
"""
4+
5+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
6+
7+
def _maybe(repo_rule, name, **kwargs):
8+
if name not in native.existing_rules():
9+
repo_rule(name = name, **kwargs)
10+
11+
def grpc_web_deps():
12+
com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_darwin_x86_64() # via <TOP>
13+
com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_linux_x86_64() # via <TOP>
14+
com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_windows_x86_64() # via <TOP>
15+
16+
def com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_darwin_x86_64():
17+
_maybe(
18+
http_file,
19+
name = "com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_darwin_x86_64",
20+
executable = True,
21+
sha256 = "466ffe6d2096a2e09823ad02170a90a3e9f79d24094ec8ddcaf6c6d4e673aa2c",
22+
urls = [
23+
"https://github.com/grpc/grpc-web/releases/download/1.3.1/protoc-gen-grpc-web-1.3.1-darwin-x86_64",
24+
],
25+
)
26+
27+
def com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_linux_x86_64():
28+
_maybe(
29+
http_file,
30+
name = "com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_linux_x86_64",
31+
executable = True,
32+
sha256 = "12d3cfefb22e077251e6d1fae2aeaafd7a66518898397c667ba69cdd1260e72a",
33+
urls = [
34+
"https://github.com/grpc/grpc-web/releases/download/1.3.1/protoc-gen-grpc-web-1.3.1-linux-x86_64",
35+
],
36+
)
37+
38+
def com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_windows_x86_64():
39+
_maybe(
40+
http_file,
41+
name = "com_github_grpc_grpc_web_releases_download_v1_3_1_protoc_gen_grpc_web_1_3_1_windows_x86_64",
42+
executable = True,
43+
sha256 = "f7f3d3b8ddcc7f0f8e432e744768682c070491fc1dcacb922343ec8f39c0d115",
44+
urls = [
45+
"https://github.com/grpc/grpc-web/releases/download/1.3.1/protoc-gen-grpc-web-1.3.1-windows-x86_64.exe",
46+
],
47+
)

example/BUILD.bazel

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,23 @@
117117
# gazelle:proto_language closure_js rule proto_closure_js_library
118118
# gazelle:proto_language closure_js rule grpc_closure_js_library
119119

120-
## node_js ##
120+
## Javascript ##
121121
# gazelle:proto_plugin node_js implementation builtin:js:common
122122
# gazelle:proto_plugin protoc-gen-grpc-node implementation grpc:grpc-node:protoc-gen-grpc-node
123123
# gazelle:proto_plugin protoc-gen-grpc-node option grpc_js
124+
# gazelle:proto_plugin protoc-gen-grpc-web implementation grpc:grpc-web:protoc-gen-grpc-web
125+
# gazelle:proto_plugin protoc-gen-grpc-web option mode=grpcwebtext
126+
# gazelle:proto_plugin protoc-gen-grpc-web option import_style=commonjs+dts
124127
# gazelle:proto_rule proto_nodejs_library implementation stackb:rules_proto:proto_nodejs_library
125128
# gazelle:proto_rule proto_nodejs_library visibility //visibility:public
126129
# gazelle:proto_rule grpc_nodejs_library implementation stackb:rules_proto:grpc_nodejs_library
127130
# gazelle:proto_rule grpc_nodejs_library visibility //visibility:public
131+
# gazelle:proto_rule grpc_web_js_library implementation stackb:rules_proto:grpc_web_js_library
132+
# gazelle:proto_rule grpc_web_js_library visibility //visibility:public
128133
# gazelle:proto_language node_js plugin node_js
129134
# gazelle:proto_language node_js plugin protoc-gen-grpc-node
135+
# gazelle:proto_language node_js plugin protoc-gen-grpc-web
130136
# gazelle:proto_language node_js rule proto_compile
131137
# gazelle:proto_language node_js rule proto_nodejs_library
132138
# gazelle:proto_language node_js rule grpc_nodejs_library
139+
# gazelle:proto_language node_js rule grpc_web_js_library

example/routeguide/BUILD.bazel

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
load("@build_stack_rules_proto//rules/ts:proto_ts_library.bzl", "proto_ts_library")
21
load("@rules_proto//proto:defs.bzl", "proto_library")
32
load("@build_stack_rules_proto//rules/cc:grpc_cc_library.bzl", "grpc_cc_library")
43
load("@build_stack_rules_proto//rules/cc:proto_cc_library.bzl", "proto_cc_library")
@@ -8,10 +7,12 @@ load("@build_stack_rules_proto//rules/go:proto_go_library.bzl", "proto_go_librar
87
load("@build_stack_rules_proto//rules/java:grpc_java_library.bzl", "grpc_java_library")
98
load("@build_stack_rules_proto//rules/java:proto_java_library.bzl", "proto_java_library")
109
load("@build_stack_rules_proto//rules/nodejs:grpc_nodejs_library.bzl", "grpc_nodejs_library")
10+
load("@build_stack_rules_proto//rules/nodejs:grpc_web_js_library.bzl", "grpc_web_js_library")
1111
load("@build_stack_rules_proto//rules/nodejs:proto_nodejs_library.bzl", "proto_nodejs_library")
1212
load("@build_stack_rules_proto//rules/py:grpc_py_library.bzl", "grpc_py_library")
1313
load("@build_stack_rules_proto//rules/py:proto_py_library.bzl", "proto_py_library")
1414
load("@build_stack_rules_proto//rules/scala:grpc_scala_library.bzl", "grpc_scala_library")
15+
load("@build_stack_rules_proto//rules/ts:proto_ts_library.bzl", "proto_ts_library")
1516
load("@build_stack_rules_proto//rules:proto_compile.bzl", "proto_compile")
1617

1718
# gazelle:proto_plugin ts_proto option nestJs=true
@@ -192,19 +193,32 @@ grpc_nodejs_library(
192193
deps = [":routeguide_nodejs_library"],
193194
)
194195

196+
grpc_web_js_library(
197+
name = "routeguide_grpc_web_js_library",
198+
srcs = ["routeguide_grpc_web_pb.js"],
199+
visibility = ["//visibility:public"],
200+
deps = [":routeguide_nodejs_library"],
201+
)
202+
195203
proto_compile(
196204
name = "routeguide_node_js_compile",
197205
options = {
198206
"@build_stack_rules_proto//plugin/builtin:commonjs": ["import_style=commonjs"],
199207
"@build_stack_rules_proto//plugin/grpc/grpc-node:protoc-gen-grpc-node": ["grpc_js"],
208+
"@build_stack_rules_proto//plugin/grpc/grpc-web:protoc-gen-grpc-web": [
209+
"import_style=commonjs+dts",
210+
"mode=grpcwebtext",
211+
],
200212
},
201213
outputs = [
202214
"routeguide_grpc_pb.js",
215+
"routeguide_grpc_web_pb.js",
203216
"routeguide_pb.js",
204217
],
205218
plugins = [
206219
"@build_stack_rules_proto//plugin/builtin:commonjs",
207220
"@build_stack_rules_proto//plugin/grpc/grpc-node:protoc-gen-grpc-node",
221+
"@build_stack_rules_proto//plugin/grpc/grpc-web:protoc-gen-grpc-web",
208222
],
209223
proto = "routeguide_proto",
210224
)

language/protobuf/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ go_library(
1414
"//pkg/plugin/grpc/grpcgo",
1515
"//pkg/plugin/grpc/grpcjava",
1616
"//pkg/plugin/grpc/grpcnode",
17+
"//pkg/plugin/grpc/grpcweb",
1718
"//pkg/plugin/grpcecosystem/grpcgateway",
1819
"//pkg/plugin/scalapb/scalapb",
1920
"//pkg/plugin/stackb/grpc_js",

language/protobuf/protobuf.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
_ "github.com/stackb/rules_proto/pkg/plugin/grpc/grpcgo"
1313
_ "github.com/stackb/rules_proto/pkg/plugin/grpc/grpcjava"
1414
_ "github.com/stackb/rules_proto/pkg/plugin/grpc/grpcnode"
15+
_ "github.com/stackb/rules_proto/pkg/plugin/grpc/grpcweb"
1516
_ "github.com/stackb/rules_proto/pkg/plugin/grpcecosystem/grpcgateway"
1617
_ "github.com/stackb/rules_proto/pkg/plugin/scalapb/scalapb"
1718
_ "github.com/stackb/rules_proto/pkg/plugin/stackb/grpc_js"

0 commit comments

Comments
 (0)