Releases: rules-proto-grpc/rules_proto_grpc
4.1.1
4.1.0
The 4.1.0 is mostly an incremental update of dependencies. However, users of the Go and grpc-gateway rules should see the note below about a change in WORKSPACE order required to avoid resolving very old versions of dependencies via Gazelle.
General
- Updated protobuf to 3.19.1
- Updated grpc to 1.42.0
C#/F#
- Updated gRPC to 2.42.0
- Updated
rules_dotnet
to latest
Go
- Updated
rules_go
to 0.29.0 - Updated
gazelle
to 0.24.0. Note that Gazelle has added multiple dependencies in 0.24.0 that conflict with our dependencies and are at quite old versions. If you get an error aboutSupportPackageIsVersion7
, you must swap the order you rungazelle_dependencies()
in your WORKSPACE to be afterrules_proto_grpc_go_repos
. See this issue for further details - Updated
com_github_envoyproxy_protoc_gen_validate
to 0.6.2
grpc-gateway
- See above note about Gazelle
gRPC-Web
- Updated
grpc-web
to 1.3.0
JavaScript
- Updated
rules_nodejs
to 4.4.6 - Updated
@grpc/grpc-js
to 1.4.4
Python
- Updated
rules_python
to 0.5.0
Ruby
- Updated
rules_ruby
to 0.6.0
Rust
- Updated
rules_rust
to latest. Note that newrules_rust
commits have moved their rules definitions from/rust/rust.bzl
to/rust/defs.bzl
, which is now required to be followed by these rules. No backwards compatibility is possible here as the original path has been removed
Scala
- Updated
rules_scala
to latest - Updated
ScalaPB
to 0.11.6
Swift
- Updated
rules_swift
to 0.24.0 - Updated
grpc-swift
to 1.6.0
4.0.1
4.0.0
The 4.0.0 release brings a number of key improvements to tidy up rules_proto_grpc, along with updates to all of the main dependencies. For most users, 4.0.0 will be a drop-in replacement to the 3.x.x releases and the updates for each language are shown below. Should you have any issues with the new release, please open a new issue or discussion.
The following changes are considered 'breaking', requiring the step to the 4.x.x release cycle:
-
The transitive aspect-based compilation mode using the
deps
attribute is now completely removed. This mode was deprecated in 3.0.0 and all use of the transitive mode will have shown a warning. If all of your uses of rules_proto_grpc use theprotos
attribute, 4.0.0 will be no different from 3.x.x. See here for further details. If you have written your own rules for a custom plugin, please see the updated and simplified rule template. -
The
//nodejs
aliases for the//js
rules have been removed. Again, these were deprecated in the 3.x.x cycle and printed a warning when used. If you are still using these aliases, you can simply change your imports to use the//js
prefixed rules. -
The Rust rules have switched gRPC implementation to grpc. In 3.x.x, we used
grpc-rs
/grpcio
, which wraps the C/C++ implementation of gRPC directly. However, the wrapping process was extremely error prone, with updates of either Rust rules or gRPC causing linker failures and significant maintenance burden. Should you still needgrpcio
crate support, the 3.1.1 release continues to work but may have issues with newer gRPC versions. The replacementgrpc
crate is self-described as 'not suitable for production use' but is more readily supportable by these rules in the short term. In the longer term, support for prost and tonic is also on the roadmap, but is waiting for protoc plugins to be available. -
When using JavaScript library rules, the require path for generated files no longer includes the
<target_name>_pb
path segment by default. For the previous behaviour, setlegacy_path = True
on the library. #107
General
- Updated protobuf to 3.18.0
- Updated grpc to 1.40.0
- Updated
rules_proto
to 4.0.0 - Documentation has moved to rules-proto-grpc.com. Existing links to the old location will continue to work
- Transitive aspect-based compilation has been removed
- The
output_files
attribute ofProtoCompileInfo
has changed from a dict of depsets to a single depset. This is generally an internal implementation detail, so is unlikely to affect any rule users.
C
- Updated
upb
to latest
C#/F#
- Added F# support. #127
- Updated gRPC to 2.40.0
D
- Updated
rules_d
to latest
Doc
- Updated
protoc-gen-doc
to 1.5.0 - Added
doc_template_compile
to generate output using a custom Go template file.
Go
- Updated
rules_go
to v0.28.0 - Added validator rules using protoc-gen-validate. #16
grpc-gateway
- Updated
grpc-gateway
to 2.6.0
Java
- Updated
grpc-java
to 1.40.1
JavaScript
- Breaking change: The require path for generated files no longer includes the
<target_name>_pb
path segment by default. For the previous behaviour, setlegacy_path = True
on the library. #107 - Added
package_name
attribute to library rules, which allows customising the package name of the generated library. By default if unspecified, the target name will continue to be used as in previous versions. - Updated
rules_nodejs
to 4.2.0 - Updated
@grpc/grpc-js
to 1.3.7 - Updated
grpc-tools
to 1.11.2 - Updated
ts-protoc-gen
to 0.15.0
Python
- Updated
rules_python
to 0.4.0 - Updated
six
to 1.16.0
Ruby
- Updated
rules_ruby
to 0.5.2 - WORKSPACE update needed: The
ruby_bundle
call in your workspace needs an extrainclude
attribute for grpc to work as expected. Please see the Ruby examples
Rust
- Updated
rules_rust
to latest - Breaking change: Replaced
grpcio
withgrpc
. Please see above description for full details on whygrpcio
is no longer supportable and the long term aim to support prost and tonic - Updated
protobuf
andprotobuf-codegen
to 2.25.1
Scala
- Updated
rules_scala
to latest - Updated
ScalaPB
to 0.11.5 - WORKSPACE update needed: Dependencies are now fetched with
maven_install
. You will need to update your WORKSPACE to match the current example.
Swift
- Updated
rules_swift
to 0.23.0 - Updated
grpc-swift
to 1.4.1 - Updated
swift-log
to 1.4.2 - Updated
swift-nio
to 2.32.3 - Updated
swift-nio-extra
to 1.10.2 - Updated
swift-nio-http2
to 1.18.3 - Updated
swift-nio-ssl
to 2.15.1 - Updated
swift-nio-transport-services
to 1.11.3
TypeScript
- The default mode for TypeScript gRPC compilation has changed to
grpc-js
. This means imports should now use@grpc/grpc-js
instead ofgrpc
#134
3.1.1
Improved documentation is now available at https://rules-proto-grpc.aliddell.com
3.1.0
This update mostly brings fixes to the JavaScript rules, along with new rules for generating Markdown, JSON, HTML or
DocBook documentation from .proto files using protoc-gen-doc.
Additionally, new buf_proto_lint
and buf_proto_breaking
rules have been added to support linting .proto files and
checking for breaking changes using Buf.
General
- Updated protobuf to 3.15.3
Buf
- Added linting and breaking change detection rules using Buf
Doc
- Added documentation rules to generate Markdown, JSON, HTML or DocBook files using
protoc-gen-doc
grpc-gateway
- Updated grpc-gateway to 2.3.0
- Fixed issue with mixing .proto files that do and do not contain services
#72
JavaScript
- Updated
rules_nodejs
to 3.2.1 - WORKSPACE update needed: The dependencies for JavaScript rules must now be loaded into your local
packge.json
,
which defaults to the name@npm
. Theyarn_install
forjs_modules
in your WORKSPACE can now also be removed - Updated
@grpc/grpc-js
to 1.2.8 - Fixed missing
DeclarationInfo
when using thejs_grpc_node_library
orjs_grpc_web_library
rules
#113 - Added a TypeScript test workspace
Objective-C
- Added the
objc_grpc_library
experimental rule
Rust
- Updated
rules_rust
to latest - Updated
grpcio
to 0.8.0 - Updated
protobuf
to 2.22.0
3.0.0
This update brings some major improvements to rules_proto_grpc and solves many of the longstanding issues that have been
present. However, in doing so there have been some changes that make a major version increment necessary and may require
updates to your build files. The updates for each language are explained below and should you have any issues, please
open a new issue or
discussion.
The most substantial change is that compilation of .proto files into language specific files is no longer transitive.
This means that only the direct dependencies of a lang_proto_library
will be present within the generated library,
rather than every transitive proto message. The justification for this is below, but if you're just interested in the
changes, you can skip down to the next heading.
In previous versions of rules_proto_grpc, the compilation aspect would compile and aggregate all dependent .proto files
from any top level target. In hindsight, this was not the correct behaviour and led to many bugs, since you may end up
creating a library that contains compiled proto files from a third party, where you should instead be depending on a
proper library for that third party's protos.
Even in a single repo, this may have meant multiple copies of a single compiled proto file being present in a target, if
it is depended on via multiple routes. For some languages, such as C++, this breaks the 'one definition rule' and
produces compilation failures or runtime bugs. For other languages, such as Python, this just meant unnecessary
duplicate files in the output binaries.
Therefore, in this release of rules_proto_grpc, there is now a recommedned option to bundle only the direct proto
dependencies into the libraries, without including the compiled transitive proto files. This is done by replacing the
deps
attr on lang_{proto|grpc}_{compile|library}
with the protos
attr. Since this would be a substantial breaking
change to drop at once on a large project, the new behaviour is opt-in in 3.0.0 and the old method continues to work
throughout the 3.x.x release cycle. Rules using the previous deps attr will have a warning written to console to signify
that your library may be bundling more than expect and should switch attr.
As an additional benefit of this change, we can now support passing arbitrary per-target rules to protoc through the new
options
attr of the rules, which was a much sought after change that was impossible in the aspect based compilation.
Switching to non-transitive compilation
In short, replace deps
with protos
on your targets:
# Old
python_grpc_library(
name = "routeguide",
deps = ["//example/proto:routeguide_proto"],
)
# New
python_grpc_library(
name = "routeguide",
protos = ["//example/proto:routeguide_proto"],
)
In applying the above change, you may discover that you were inheriting dependencies transitively and that your builds
now fail. In such cases, you should add a lang_{proto|grpc}_{compile|library}
target for those proto files and
depend on it explicitly from the relevant top level binaries/libraries.
General Changes
- Updated protobuf to 3.15.1
- Updated gRPC to 1.35.0
- All rules have new per-target
options
andextra_protoc_args
attributes to control options to protoc
#54
#68
#105 - Updated
rules_proto
to latest head aspect.bzl
andplugin.bzl
have merged to a single top leveldefs.bzl
- The minimum supported Bazel version is 3.0.0. Some language specific rules may require 4.0.0
Android
- WORKSPACE update needed: The WORKSPACE imports necessary for Android rules have been updated due to upstream
changes ingrpc-java
. Please see the examples for the latest WORKSPACE template for the Android rules
C
- Added experimental rules for C using upb #20
C++
- Non-transitive mode resolves issue where the same proto may be defined more than once
#25 - Header and source files are now correctly passed to the underlying
cc_library
rule
#40
Closure
- Closure rules have been removed. In practice these have been superceded by the Javascript rules, but if you are an
active user of these rules please open a discussion.
C#
- Updated
rules_dotnet
to 0.0.7. Note that the new versions ofrules_dotnet
drop support for .Net Framework and
Mono and require use of alternate platforms. Please see the examples for the latest WORKSPACE template for the
C# rules - Updated
Grpc
to 2.35.0
D
- Updated
rules_d
to latest
Go
- Updated
rules_go
to 0.25.1 - WORKSPACE update needed: It is now necessary to specify
version
togo_register_toolchains
- The plugin used for compiling .proto files for Go has switched to the new google.golang.org/protobuf
#85 - Updated
gazelle
to 0.22.3 - Updated
org_golang_x_net
to v0.0.0-20210129194117-4acb7895a057 - Updated
org_golang_x_text
to 0.3.5 - Well-known types are now depended on by default
- Removed support for GoGo rules
grpc-gateway
- Updated
grpc-gateway
to 2.2.0 - The
gateway_swagger_compile
rule has been replaced withgateway_openapiv2_compile
#93 - The grpc-gateway rules have move to repo top level, meaning they are no longer under the
github.com/...
prefix. To
Update your use of these rules find and replace@rules_proto_grpc//github.com/grpc-ecosystem/grpc-gateway
with
@rules_proto_grpc//grpc-gateway
gRPC-Web
- The gRPC-Web rules have moved into
//js
- Text mode generation is now supported #59
Java
- WORKSPACE update needed: The WORKSPACE imports necessary for Java rules have been updated due to upstream
changes ingrpc-java
. Please see the examples for the latest WORKSPACE template for the Java rules
NodeJS/JavaScript
- The JavaScript rules have moved from
@rules_proto_grpc//nodejs
to@rules_proto_grpc//js
, but the old rules are
still aliased to ease transition - Updated
rules_nodejs
to 3.1.0 - Updated
@grpc/grpc-js
to 1.2.6 - Added typescript generation to JS rules
Objective-C
- Added
copt
argument pass-through for Obj-C library rules. - Header and source files are now correctly passed to the underlying
cc_library
rule
#40
Python
- Updated
rules_python
to latest - WORKSPACE update needed:
py_repositories
fromrules_python
is no longer required
Ruby
- The Ruby rules have migrated from
yugui/rules_ruby
tobazelruby/rules_ruby
- Changes
rules_proto_grpc_gems
torules_proto_grpc_bundle
- WORKSPACE update needed: The above changes requiresupdates to your WORKSPACE, please see the examples for the
latest WORKSPACE template for the Ruby rules - Open issue: The
grpc
gem may not be loadable in generated Ruby libraries, please see
this issue.
Rust
- WORKSPACE update needed: The upstream repo
io_bazel_rules_rust
has been renamed torules_rust
. The
rust_workspace
rule is also no longer required - Updated
rules_rust
to latest - Updated
grpcio
to 0.7.1 - Updated
protobuf
to 2.20.0
Scala
- Update
rules_scala
to latest #108 - WORKSPACE update needed: The
scala_config
rule fromrules_scala
is now required in your WORKSPACE
Swift
- Updated
rules_swift
to 0.18.0 - Updated
grpc-swift
to 1.0.0 - Visibility of generated types is now configurable with
options
#111
Thanks
Thanks to everyone who has contributed issues and patches for this release.
2.0.0
General
- Updated
protobuf
to 3.13.0 - Updated
grpc
to 1.32.0 - WORKSPACE update needed: These rules now depend on
rules_proto
, which must be added to your WORKSPACE file - Dropped support for the deprecated
transitivity
attribute onproto_plugin
. Theexclusions
attribute is the supported way of achieving this - The
output_dirs
attribute ofProtoCompileInfo
is now a depset, meaning directories will be deduplicated - Removed the
deps.bzl
files that have been deprecated since version 1.0.0 - Tags are now propagated correctly on library rules
Android
- WORKSPACE update needed: The Guava dependency is no longer needed
C#
- Updated
rules_dotnet
to latest master - Updated
Google.Protobuf
to 3.13.0 - Updated
Grpc
to 2.32.0 - WORKSPACE update needed: There have been substantial changes to the required WORKSPACE rules for C#. Please see the C# language page
Closure
- Updated
rules_closure
to 0.11.0
D
- Updated
rules_d
to latest master - Updated
protobuf-d
to 0.6.2
grpc-gateway
- Updated
grpc-gateway
to 1.15.0
gRPC Web
- Updated gRPC Web to 1.2.1
Go
- Updated
rules_go
to 0.24.3 - Updated
bazel-gazelle
to 0.21.1 - Updated
org_golang_x_net
to v0.0.0-20200930145003-4acb6c075d10 - Updated
org_golang_x_text
to 0.3.3
Java
- WORKSPACE update needed: The Guava dependency is no longer needed
NodeJS
- Updated
rules_nodejs
to 2.2.0 - WORKSPACE update needed: The
defs.bzl
file inrules_nodejs
has moved toindex.bzl
- WORKSPACE update needed: Running
yarn_install()
is needed in more cases - WORKSPACE update needed: Running
grpc_deps()
is no longer necessary for just the NodeJS rules - Moved from
grpc
to@grpc/grpc-js
package - Library rules have been enabled and now return
js_library
rather thannpm_package
Python
- Dropped Python 2 support
- Updated
rules_python
to latest master - Updated
grpclib
to 0.4.1 - Moved to using
grpcio
library directly from the localgrpc
repository. - Pinned dependency versions in requirements.txt using pip-compile
- WORKSPACE update needed: The method for loading Pip dependencies has changed. Please see the Python language page.
- WORKSPACE update needed: Using the Pip dependencies is now only necessary if you are using the
grpclib
rules
Rust:
- Updated
rules_rust
to latest master - Updated
protobuf
crate to 2.17.0 - Updated
grpcio
crate to 0.6.0 - WORKSPACE update needed: The setup for
rules_rust
has changed in the newer version. Please see the Rust language page. - WORKSPACE update needed: The
grpc_deps()
rule is now needed for Rust
Scala:
- Updated
rules_scala
to latest master ScalaPB
is now pulled fromrules_scala
, which uses 0.9.7- WORKSPACE update needed: The
scala_proto_repositories()
rule is now needed
Swift:
- Updated
rules_swift
to 0.15.0 - Updated
grpc-swift
to 0.11.0 - Moved the Swift library rules to be internal to this repo