github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/docs/scala.md (about)

     1  ---
     2  layout: default
     3  title: scala
     4  permalink: examples/scala
     5  parent: Examples
     6  ---
     7  
     8  # scala example
     9  
    10  `bazel test //example/golden:scala_test`
    11  
    12  ## `BUILD.bazel` (after gazelle)
    13  
    14  ```python
    15  load("@rules_proto//proto:defs.bzl", "proto_library")
    16  load("@build_stack_rules_proto//rules/scala:grpc_scala_library.bzl", "grpc_scala_library")
    17  load("@build_stack_rules_proto//rules:proto_compile.bzl", "proto_compile")
    18  
    19  proto_library(
    20      name = "syntax_proto",
    21      srcs = [
    22          "noun.proto",
    23          "package.proto",
    24          "pronoun.proto",
    25          "service.proto",
    26      ],
    27      visibility = ["//visibility:public"],
    28      deps = [
    29          "//proto:proto_proto",
    30          "@scalaapis//scalapb:scalapb_proto",
    31      ],
    32  )
    33  
    34  grpc_scala_library(
    35      name = "syntax_scala_library",
    36      srcs = [
    37          "syntax_akka_grpc.srcjar",
    38          "syntax_scala.srcjar",
    39      ],
    40      visibility = ["//visibility:public"],
    41      deps = [
    42          "//lib:scala",
    43          "//proto:proto_scala_library",
    44          "@com_google_protobuf//:protobuf_java",
    45          "@maven_akka//:com_lightbend_akka_grpc_akka_grpc_runtime_2_12",
    46          "@maven_akka//:com_typesafe_akka_akka_actor_2_12",
    47          "@maven_akka//:com_typesafe_akka_akka_http_core_2_12",
    48          "@maven_akka//:com_typesafe_akka_akka_stream_2_12",
    49          "@maven_scala//:com_thesamet_scalapb_lenses_2_12",
    50          "@maven_scala//:com_thesamet_scalapb_scalapb_runtime_2_12",
    51          "@maven_scala//:com_thesamet_scalapb_scalapb_runtime_grpc_2_12",
    52          "@maven_scala//:io_grpc_grpc_api",
    53          "@maven_scala//:io_grpc_grpc_protobuf",
    54          "@maven_scala//:io_grpc_grpc_stub",
    55          "@scalaapis//scalapb:scalapb_proto_scala_library",
    56      ],
    57  )
    58  
    59  proto_compile(
    60      name = "syntax_scala_compile",
    61      options = {"@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala": ["grpc"]},
    62      outputs = [
    63          "syntax_akka_grpc.srcjar",
    64          "syntax_scala.srcjar",
    65      ],
    66      plugins = [
    67          "@build_stack_rules_proto//plugin/akka/akka-grpc:protoc-gen-akka-grpc",
    68          "@build_stack_rules_proto//plugin/scalapb/scalapb:protoc-gen-scala",
    69      ],
    70      proto = "syntax_proto",
    71  )
    72  ```
    73  
    74  ## `BUILD.bazel` (before gazelle)
    75  
    76  ```python
    77  ```
    78  
    79  ## `WORKSPACE`
    80  
    81  ```python
    82  # ----------------------------------------------------
    83  # scala
    84  # ----------------------------------------------------
    85  
    86  load("@build_stack_rules_proto//deps:scala_deps.bzl", "scala_deps")
    87  
    88  scala_deps()
    89  
    90  load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
    91  
    92  scala_config(scala_version = "2.12.18")
    93  
    94  load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")
    95  
    96  scala_repositories()
    97  
    98  load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
    99  
   100  scala_register_toolchains()
   101  
   102  # ----------------------------------------------------
   103  # maven
   104  # ----------------------------------------------------
   105  
   106  load(
   107      "@rules_jvm_external//:defs.bzl",
   108      "maven_install",
   109  )
   110  
   111  maven_install(
   112      name = "maven_scala",
   113      artifacts = [
   114          "com.thesamet.scalapb:lenses_2.12:0.11.10",
   115          "com.thesamet.scalapb:scalapb-json4s_2.12:0.12.0",
   116          "com.thesamet.scalapb:scalapb-runtime_2.12:0.11.10",
   117          "com.thesamet.scalapb:scalapb-runtime-grpc_2.12:0.11.10",
   118          "com.thesamet.scalapb:scalapbc_2.12:0.11.10",
   119          "org.json4s:json4s-core_2.12:4.0.3",
   120      ],
   121      fetch_sources = True,
   122      repositories = ["https://repo1.maven.org/maven2"],
   123  )
   124  
   125  # ----------------------------------------------------
   126  # akka
   127  # ----------------------------------------------------
   128  
   129  maven_install(
   130      name = "maven_akka",
   131      artifacts = [
   132          "com.lightbend.akka.grpc:akka-grpc-codegen_2.12:2.1.3",
   133          "com.lightbend.akka.grpc:akka-grpc-runtime_2.12:2.1.3",
   134      ],
   135      fetch_sources = True,
   136      repositories = ["https://repo1.maven.org/maven2"],
   137  )
   138  
   139  # ----------------------------------------------------
   140  # proto_repository
   141  # ----------------------------------------------------
   142  
   143  load("@build_stack_rules_proto//rules/proto:proto_repository.bzl", "proto_repository")
   144  
   145  proto_repository(
   146      name = "scalaapis",
   147      build_directives = ["gazelle:proto_language scala enabled true"],
   148      build_file_generation = "on",
   149      build_file_proto_mode = "file",
   150      cfgs = ["//:config.yaml"],
   151      sha256 = "1ac039f79b0825fe2e7e5ddf24e330632d63b70a7a42bfd39ded5bb1fb648811",
   152      # the typical importpath is 'scalapb/scalapb.proto', so strip the prefix up
   153      # to that directory.
   154      strip_prefix = "ScalaPB-a4e0e02c0f5b160877d5f97f6902dbec4c633afe/protobuf",
   155      type = "zip",
   156      urls = ["https://codeload.github.com/scalapb/ScalaPB/zip/a4e0e02c0f5b160877d5f97f6902dbec4c633afe"],
   157  )
   158  ```