Description
From what I understand, there are 2 (independent? complementary?) paths to create a custom twitter_scrooge
toolchain.
You can either invoke setup_scrooge_toolchain
or use the tag class a la scala_deps.twitter_scrooge(libthrift = ..., ....)
.
In the former case, supplying an override to every param in the constructor leads to this error, due to implicit non overrideable labels being summoned deeper in the macro:
no such package '@@[unknown repo 'io_bazel_rules_scala_scopt_2_13_16' requested from @@]//': The repository '@@[unknown repo 'io_bazel_rules_scala_scopt_2_13_16' requested from @@]' could not be resolved: No repository visible as '@io_bazel_rules_scala_scopt_2_13_16' from main repository and referenced by '//tools/scala:compiler_classpath_provider'
You can work around this via something like:
scala_deps = use_extension("//scala/extensions:deps.bzl", "scala_deps")
scala_deps.scala()
scala_deps.twitter_scrooge()
SCALA_VERSION="2.13.16"
version_suffix = "_%s" % SCALA_VERSION.replace(".", "_")
use_repo(
scala_deps,
"io_bazel_rules_scala_javax_annotation_api" + version_suffix,
"io_bazel_rules_scala_mustache" + version_suffix,
... other non overrideable deps ...
)
but this is not obvious, and requires you to invoke scala_deps.scala()
even if you had successfully obviated that call previously via a custom Scala toolchain.
In the latter case (using the tag class and providing overrides), we hit a label vs string issue:
@@rules_scala+//scala/extensions:rules_scala++scala_deps+rules_scala_toolchains: expected value of type 'string' for dict value element, but got Label("@@rules_jvm_external++maven+maven//:org_apache_thrift_libthrift") (Label)
ERROR: /private/var/tmp/_bazel_fp/2927ef64b11207240f16497f643a99d5/external/rules_scala+/scala/toolchains.bzl:228:26: Traceback (most recent call last):
File "/private/var/tmp/_bazel_fp/2927ef64b11207240f16497f643a99d5/external/rules_scala+/scala/extensions/deps.bzl", line 227, column 21, in _scala_deps_impl
scala_toolchains(
File "/private/var/tmp/_bazel_fp/2927ef64b11207240f16497f643a99d5/external/rules_scala+/scala/toolchains.bzl", line 228, column 26, in scala_toolchains
scala_toolchains_repo(
Error in repository_rule: failed to instantiate 'scala_toolchains_repo' from this module extension
In an ideal world, the preferred route of creating a custom twitter_scrooge
toolchain - or pros/cons of either route - is well documented, and all overrides are self contained in one call.