Skip to content

Commit

Permalink
feat: Add Kotlin (JVM) support
Browse files Browse the repository at this point in the history
Provide rules to build Kotlin proto and grpc libraries. Currently
upstream Protobuf and gRPC support only JVM-flavour Kotlin.

Fixes rules-proto-grpc#139.
  • Loading branch information
Zetten committed Feb 17, 2023
1 parent bbb8193 commit 62a6f99
Show file tree
Hide file tree
Showing 32 changed files with 2,282 additions and 142 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ Full documentation for the current and previous versions [can be found here](htt
| [Java](https://rules-proto-grpc.com/en/latest/lang/java.html) | [java_grpc_compile](https://rules-proto-grpc.com/en/latest/lang/java.html#java-grpc-compile) | Generates a Java protobuf and gRPC srcjar file ([example](/example/java/java_grpc_compile)) |
| [Java](https://rules-proto-grpc.com/en/latest/lang/java.html) | [java_proto_library](https://rules-proto-grpc.com/en/latest/lang/java.html#java-proto-library) | Generates a Java protobuf library using ``java_library`` ([example](/example/java/java_proto_library)) |
| [Java](https://rules-proto-grpc.com/en/latest/lang/java.html) | [java_grpc_library](https://rules-proto-grpc.com/en/latest/lang/java.html#java-grpc-library) | Generates a Java protobuf and gRPC library using ``java_library`` ([example](/example/java/java_grpc_library)) |
| [Kotlin](https://rules-proto-grpc.com/en/latest/lang/kotlin.html) | [kotlin_proto_compile](https://rules-proto-grpc.com/en/latest/lang/kotlin.html#kotlin-proto-compile) | Generates a Kotlin (JVM) protobuf srcjar file ([example](/example/kotlin/kotlin_proto_compile)) |
| [Kotlin](https://rules-proto-grpc.com/en/latest/lang/kotlin.html) | [kotlin_grpc_compile](https://rules-proto-grpc.com/en/latest/lang/kotlin.html#kotlin-grpc-compile) | Generates a Kotlin (JVM) protobuf and gRPC srcjar file ([example](/example/kotlin/kotlin_grpc_compile)) |
| [Kotlin](https://rules-proto-grpc.com/en/latest/lang/kotlin.html) | [kotlin_proto_library](https://rules-proto-grpc.com/en/latest/lang/kotlin.html#kotlin-proto-library) | Generates a Kotlin (JVM) protobuf library using ``kt_jvm_library`` ([example](/example/kotlin/kotlin_proto_library)) |
| [Kotlin](https://rules-proto-grpc.com/en/latest/lang/kotlin.html) | [kotlin_grpc_library](https://rules-proto-grpc.com/en/latest/lang/kotlin.html#kotlin-grpc-library) | Generates a Kotlin (JVM) protobuf and gRPC library using ``kt_jvm_library`` ([example](/example/kotlin/kotlin_grpc_library)) |
| [JavaScript](https://rules-proto-grpc.com/en/latest/lang/js.html) | [js_proto_compile](https://rules-proto-grpc.com/en/latest/lang/js.html#js-proto-compile) | Generates JavaScript protobuf ``.js`` and ``.d.ts`` files ([example](/example/js/js_proto_compile)) |
| [JavaScript](https://rules-proto-grpc.com/en/latest/lang/js.html) | [js_grpc_node_compile](https://rules-proto-grpc.com/en/latest/lang/js.html#js-grpc-node-compile) | Generates JavaScript protobuf and gRPC-node ``.js`` and ``.d.ts`` files ([example](/example/js/js_grpc_node_compile)) |
| [JavaScript](https://rules-proto-grpc.com/en/latest/lang/js.html) | [js_grpc_web_compile](https://rules-proto-grpc.com/en/latest/lang/js.html#js-grpc-web-compile) | Generates JavaScript protobuf and gRPC-Web ``.js`` and ``.d.ts`` files ([example](/example/js/js_grpc_web_compile)) |
Expand Down
285 changes: 151 additions & 134 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,50 @@ rules_proto_dependencies()

rules_proto_toolchains()

#
# Java
#
load("//java:repositories.bzl", "java_repos")

java_repos()

#
# Kotlin-JVM
#
load("//kotlin:repositories.bzl", "kotlin_repos")

kotlin_repos()

load("@io_bazel_rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories")

kotlin_repositories()

load("@io_bazel_rules_kotlin//kotlin:core.bzl", "kt_register_toolchains")

kt_register_toolchains()

load("@rules_jvm_external//:defs.bzl", "maven_install")
load("@io_grpc_grpc_java//:repositories.bzl", "IO_GRPC_GRPC_JAVA_ARTIFACTS", "IO_GRPC_GRPC_JAVA_OVERRIDE_TARGETS", "grpc_java_repositories")
load("@com_github_grpc_grpc_kotlin//:repositories.bzl", "IO_GRPC_GRPC_KOTLIN_ARTIFACTS", "IO_GRPC_GRPC_KOTLIN_OVERRIDE_TARGETS", "grpc_kt_repositories")

maven_install(
artifacts = IO_GRPC_GRPC_JAVA_ARTIFACTS + IO_GRPC_GRPC_KOTLIN_ARTIFACTS,
generate_compat_repositories = True,
override_targets = dict(IO_GRPC_GRPC_JAVA_OVERRIDE_TARGETS.items() +
IO_GRPC_GRPC_KOTLIN_OVERRIDE_TARGETS.items()),
repositories = [
"https://repo.maven.apache.org/maven2/",
],
)

load("@maven//:compat.bzl", "compat_repositories")

compat_repositories()

grpc_java_repositories()

grpc_kt_repositories()

#
# Android
#
Expand Down Expand Up @@ -58,23 +102,23 @@ go_repos()
# Load build_bazel_rules_swift before running grpc_deps in C++, since that depends on a very old
# version of build_bazel_apple_support
#
load("//swift:repositories.bzl", "swift_repos")

swift_repos()

load(
"@build_bazel_rules_swift//swift:repositories.bzl",
"swift_rules_dependencies",
)

swift_rules_dependencies()
#load("//swift:repositories.bzl", "swift_repos")
#
#swift_repos()
#
#load(
# "@build_bazel_rules_swift//swift:repositories.bzl",
# "swift_rules_dependencies",
#)
#
#swift_rules_dependencies()

#
# C++
#
load("//cpp:repositories.bzl", "cpp_repos")

cpp_repos()
#load("//cpp:repositories.bzl", "cpp_repos")
#
#cpp_repos()

load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")

Expand All @@ -87,71 +131,53 @@ grpc_extra_deps()
#
# Android
#
load("//android:repositories.bzl", "android_repos")

android_repos()

load("@rules_jvm_external//:defs.bzl", "maven_install")
load("@io_grpc_grpc_java//:repositories.bzl", "IO_GRPC_GRPC_JAVA_ARTIFACTS", "IO_GRPC_GRPC_JAVA_OVERRIDE_TARGETS", "grpc_java_repositories")

maven_install(
artifacts = IO_GRPC_GRPC_JAVA_ARTIFACTS,
generate_compat_repositories = True,
override_targets = IO_GRPC_GRPC_JAVA_OVERRIDE_TARGETS,
repositories = [
"https://repo.maven.apache.org/maven2/",
],
)

load("@maven//:compat.bzl", "compat_repositories")

compat_repositories()

grpc_java_repositories()

load("@build_bazel_rules_android//android:sdk_repository.bzl", "android_sdk_repository")
#load("//android:repositories.bzl", "android_repos")
#
#android_repos()

android_sdk_repository(name = "androidsdk")
#load("@build_bazel_rules_android//android:sdk_repository.bzl", "android_sdk_repository")
#
#android_sdk_repository(name = "androidsdk")

#
# C#/F#
#
load("//csharp:repositories.bzl", "csharp_repos")

csharp_repos()

load("@io_bazel_rules_dotnet//dotnet:deps.bzl", "dotnet_repositories")

dotnet_repositories()

load(
"@io_bazel_rules_dotnet//dotnet:defs.bzl",
"dotnet_register_toolchains",
"dotnet_repositories_nugets",
)

dotnet_register_toolchains()

dotnet_repositories_nugets()

load("@rules_proto_grpc//csharp/nuget:nuget.bzl", nuget_rules_proto_grpc_packages_csharp = "nuget_rules_proto_grpc_packages")

nuget_rules_proto_grpc_packages_csharp()

load("@rules_proto_grpc//fsharp/nuget:nuget.bzl", nuget_rules_proto_grpc_packages_fsharp = "nuget_rules_proto_grpc_packages")

nuget_rules_proto_grpc_packages_fsharp()
#load("//csharp:repositories.bzl", "csharp_repos")
#
#csharp_repos()
#
#load("@io_bazel_rules_dotnet//dotnet:deps.bzl", "dotnet_repositories")
#
#dotnet_repositories()
#
#load(
# "@io_bazel_rules_dotnet//dotnet:defs.bzl",
# "dotnet_register_toolchains",
# "dotnet_repositories_nugets",
#)
#
#dotnet_register_toolchains()
#
#dotnet_repositories_nugets()
#
#load("@rules_proto_grpc//csharp/nuget:nuget.bzl", nuget_rules_proto_grpc_packages_csharp = "nuget_rules_proto_grpc_packages")
#
#nuget_rules_proto_grpc_packages_csharp()
#
#load("@rules_proto_grpc//fsharp/nuget:nuget.bzl", nuget_rules_proto_grpc_packages_fsharp = "nuget_rules_proto_grpc_packages")
#
#nuget_rules_proto_grpc_packages_fsharp()

#
# D
#
load("//d:repositories.bzl", "d_repos")

d_repos()

load("@io_bazel_rules_d//d:d.bzl", "d_repositories")

d_repositories()
#load("//d:repositories.bzl", "d_repos")
#
#d_repos()
#
#load("@io_bazel_rules_d//d:d.bzl", "d_repositories")
#
#d_repositories()

#
# Doc
Expand Down Expand Up @@ -181,15 +207,6 @@ load("@grpc_ecosystem_grpc_gateway//:repositories.bzl", "go_repositories")

go_repositories()

#
# Java
#
load("//java:repositories.bzl", "java_repos")

java_repos()

# grpc_java_repositories already called above in android

#
# JavaScript
#
Expand All @@ -212,16 +229,16 @@ yarn_install(
#
# Objective-C
#
load("//objc:repositories.bzl", "objc_repos")

objc_repos()
#load("//objc:repositories.bzl", "objc_repos")
#
#objc_repos()

#
# PHP
#
load("//php:repositories.bzl", "php_repos")

php_repos()
#load("//php:repositories.bzl", "php_repos")
#
#php_repos()

#
# Python
Expand All @@ -245,64 +262,64 @@ install_deps()
#
# Ruby
#
load("//ruby:repositories.bzl", "ruby_repos")

ruby_repos()

load("@bazelruby_rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies", "rules_ruby_select_sdk")

rules_ruby_dependencies()

rules_ruby_select_sdk(version = "3.0.2")

load("@bazelruby_rules_ruby//ruby:defs.bzl", "ruby_bundle")

ruby_bundle(
name = "rules_proto_grpc_bundle",
gemfile = "@rules_proto_grpc//ruby:Gemfile",
gemfile_lock = "@rules_proto_grpc//ruby:Gemfile.lock",
includes = {"grpc": ["etc"]},
)
#load("//ruby:repositories.bzl", "ruby_repos")
#
#ruby_repos()
#
#load("@bazelruby_rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies", "rules_ruby_select_sdk")
#
#rules_ruby_dependencies()
#
#rules_ruby_select_sdk(version = "3.0.2")
#
#load("@bazelruby_rules_ruby//ruby:defs.bzl", "ruby_bundle")
#
#ruby_bundle(
# name = "rules_proto_grpc_bundle",
# gemfile = "@rules_proto_grpc//ruby:Gemfile",
# gemfile_lock = "@rules_proto_grpc//ruby:Gemfile.lock",
# includes = {"grpc": ["etc"]},
#)

#
# Rust
#
load("//rust:repositories.bzl", "rust_repos")

rust_repos()

load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")

rules_rust_dependencies()

rust_register_toolchains(edition = "2021")
#load("//rust:repositories.bzl", "rust_repos")
#
#rust_repos()
#
#load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")
#
#rules_rust_dependencies()
#
#rust_register_toolchains(edition = "2021")

#
# Scala
#
load("//scala:repositories.bzl", "MAVEN_ARTIFACTS", "scala_repos")

scala_repos()

load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")

scala_config()

load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")

scala_repositories()

load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")

scala_register_toolchains()

maven_install(
name = "rules_proto_grpc_scala_maven",
artifacts = MAVEN_ARTIFACTS,
repositories = [
"https://repo1.maven.org/maven2",
],
)
#load("//scala:repositories.bzl", "MAVEN_ARTIFACTS", "scala_repos")
#
#scala_repos()
#
#load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
#
#scala_config()
#
#load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")
#
#scala_repositories()
#
#load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
#
#scala_register_toolchains()
#
#maven_install(
# name = "rules_proto_grpc_scala_maven",
# artifacts = MAVEN_ARTIFACTS,
# repositories = [
# "https://repo1.maven.org/maven2",
# ],
#)

#
# Swift
Expand Down
6 changes: 3 additions & 3 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ notified of new releases, you can use GitHub's 'Watch Releases Only' on the repo
http_archive(
name = "rules_proto_grpc",
sha256 = "fb7fc7a3c19a92b2f15ed7c4ffb2983e956625c1436f57a3430b897ba9864059",
strip_prefix = "rules_proto_grpc-4.3.0",
urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/4.3.0.tar.gz"],
sha256 = "{ARCHIVE_TAR_GZ_SHA256}",
strip_prefix = "rules_proto_grpc-{GIT_COMMIT_ID}",
urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/{GIT_COMMIT_ID}.tar.gz"],
)
load("@rules_proto_grpc//:repositories.bzl", "rules_proto_grpc_toolchains", "rules_proto_grpc_repos")
Expand Down

0 comments on commit 62a6f99

Please sign in to comment.