bazelbuild / rules_scala

Scala rules for Bazel
Apache License 2.0
358 stars 265 forks source link

Cannot compile a Scrooge Finagle service #592

Open pvcnt opened 5 years ago

pvcnt commented 5 years ago

Hello,

Since I upgraded my Scala rules (last version known to work was 21c8913a2cf35130870df9f07a781afc77f33693, from last March), I cannot compile anymore my Thrift services with Scrooge. Creating scrooge_scala_library when the IDL file contains only structs is ok, but I cannot create a library when the IDL file also contains a service.

When trying to compile the target scrooge_scala_library, I get a lot of compilation errors looking like: error: object finagle is not a member of package com.twitter

Previously, I used to add "//3rdparty/jvm/com/twitter:finagle_thrift" to my deps to bring in the Finagle dependency, but if I do so, I now get another error: <target //3rdparty/jvm/com/twitter:finagle_thrift> (rule 'scala_import') doesn't contain declared provider 'ThriftInfo'

I couldn't spot any documentation or tests about compiling Finagle Scrooge services, so I am a bit stuck. I can contribute tests/documentation if given a hint about how things are supposed to work. Thanks!

johnynek commented 5 years ago

@pvcnt could you possibly submit a failing test?

The problem is we didn't have any tests for this and are clearly not exercising this. :(

I'm afraid the refactor of the rules may have broken thrift services.

You can try to work around with:

https://github.com/bazelbuild/rules_scala/blob/master/twitter_scrooge/twitter_scrooge.bzl#L386

scrooge_scala_import(
  name = "finagle_deps",
  scala_jars = ["//3rdparty/jvm/com/twitter:finagle_thrift"]
)

and then add that as a dep...

However, if that does not work, we may have a bigger problem. Obviously, that's a pain... what we probably need to do is improve a thrift toolchain similar to the scalac provider code so that we can configure which jars are on the classpath by default.

pvcnt commented 5 years ago

@johnynek Thank you for your response and suggestion.

I created a reproducibility repository here: https://github.com/pvcnt/rules_scala-issue-592 Please use bazel build thrift:service_scala_thrift to try to compile a simple Scrooge service, which fails.

I tried your suggestion, and I have another error:

ERROR: /Users/vincent/workspace/rules_scala-issue-592/thrift/BUILD:20:1: in scrooge_scala_library rule //thrift:service_scala_thrift:
Traceback (most recent call last):
    File "/Users/vincent/workspace/rules_scala-issue-592/thrift/BUILD", line 20
        scrooge_scala_library(name = 'service_scala_thrift')
    File "/private/var/tmp/_bazel_vincent/aaff53d76bc8f1f19b1b4ed957fdcd9f/external/io_bazel_rules_scala/twitter_scrooge/twitter_scrooge.bzl", line 334, in _scrooge_scala_library_impl
        struct(scala = _create_scala_struct(ctx..., ...)])
    File "/private/var/tmp/_bazel_vincent/aaff53d76bc8f1f19b1b4ed957fdcd9f/external/io_bazel_rules_scala/twitter_scrooge/twitter_scrooge.bzl", line 335, in struct
        _create_scala_struct(ctx)
    File "/private/var/tmp/_bazel_vincent/aaff53d76bc8f1f19b1b4ed957fdcd9f/external/io_bazel_rules_scala/twitter_scrooge/twitter_scrooge.bzl", line 356, in _create_scala_struct
        dep[ScroogeAspectInfo].java_info.outputs.jars
object of type 'NoneType' has no field 'jars'
ERROR: Analysis of target '//thrift:service_scala_thrift' failed; build aborted: Analysis of target '//thrift:service_scala_thrift' failed; build aborted
INFO: Elapsed time: 0.125s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (1 packages loaded)

I am not very familiar with complex Bazel rules, but let me know if I can help otherwise (e.g., by contributing tests or documentation).

samschlegel commented 5 years ago

I fixed the last error you had with https://github.com/discordapp/rules_scala/commit/053d08aad0983cb1310b77d2bb3587c1e67b1128, but this only appears to fix that error not appearing. Compile still fails with error: object finagle is not a member of package com.twitter

KaoruDev commented 4 years ago

I encountered a similar exception and got around it by re-binding a group of libraries. I made a PR (which is pending) updating the README on how to do this: https://github.com/bazelbuild/rules_scala/pull/847

pvcnt commented 4 months ago

It's been four years, I moved on. :)

FrankPortman commented 1 month ago

@pvcnt does that mean to date there is no way to compile bindings for service in thrift using scrooge?

pvcnt commented 1 month ago

I don't know tbh, I'm not anymore using those rules.