Skip to content

Commit 43146ea

Browse files
authored
Toolchainize //scala:toolchain_type (bazel-contrib#1633)
* Toolchainize //scala:toolchain_type Moves the `toolchain` targets for `//scala:toolchain_type` to a new `@io_bazel_rules_scala_toolchains` repository as a step towards Bzlmodification. Part of bazel-contrib#1482. Instantiating toolchains in their own repository enables module extensions to define the the repositories required by those toolchains within the extension's own namespace. Bzlmod users can then register the toolchains from this repository without having to import all the toolchains' dependencies into their own namespace via `use_repo()`. --- The `scala_toolchains_repo()` macro wraps the underlying repository rule and assigns it the standard name `io_bazel_rules_scala_toolchains`. Right now it's only instantiating the main Scala toolchain via the default `scala = True` parameter. Future changes will expand this macro and repository rule with more boolean parameters to instantiate other toolchains, specifically: - `scalatest` - `junit` - `specs2` - `twitter_scrooge` - `jmh` - `scala_proto` and `scala_proto_enable_all_options` - `testing` (includes all of `scalatest`, `junit`, and `specs2`) - `scalafmt` --- `WORKSPACE` users will now have to import and call the `scala_toolchains_repo()` macro to instantiate `@io_bazel_rules_scala_toolchains`. ```py load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config() load( "//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", "scala_toolchains_repo", ) rules_scala_setup() rules_scala_toolchain_deps_repositories() scala_toolchains_repo() register_toolchains("@io_bazel_rules_scala_toolchains//...:all") ``` This is what the corresponding `MODULE.bazel` setup would look like: ```py module(name = "rules_scala", version = "7.0.0") scala_config = use_extension( "//scala/extensions:config.bzl", "scala_config" ) scala_config.settings(scala_version = "2.13.14") scala_deps = use_extension("//scala/extensions:deps.bzl", "scala_deps") scala_deps.toolchains() ``` The `register_toolchains()` call in `WORKSPACE` isn't strictly required at this point, but is recommended. However, all the `WORKSPACE` files in this repo already register their required toolchains using existing macros, which have been updated in this change. In fact, calling `register_toolchains()` right after `scala_toolchains_repo()` as shown above breaks two tests that depend on the existing `WORKSPACE` toolchain registration: - `test_compilation_fails_with_plus_one_deps_undefined` from `test/shell/test_compilation.sh` depends on `scala_register_unused_deps_toolchains()` setting up its toolchain to resolve first. `//scala:unused_dependency_checker_error_toolchain` sets the `scala_toolchain()` parameters `dependency_tracking_method = "ast-plus"` and `unused_dependency_checker_mode = "error"`, and the `@io_bazel_rules_scala_toolchains//scala` toolchains don't. - `test_scala_binary_allows_opt_in_to_use_of_argument_file_in_runner_for_improved_performance` from `test/shell/test_scala_binary.sh` depends on the `use_argument_file_in_runner` parameter of `scala_toolchain` being `False`. This is the default, but the `@io_bazel_rules_scala_toolchains//scala` toolchains explicitly set this to `True` instead. In the Bzlmod case, the `register_toolchains()` call isn't necessary at all. This is because `@io_bazel_rules_scala_toolchains` includes one package per set of toolchains, and the rules_scala `MODULE.bazel` calls `register_toolchains("@io_bazel_rules_scala_toolchains//...:all")`. This will automatically register all configured rules_scala toolchains, while allowing users to override any of them using `register_toolchains()` in their own `MODULE.bazel` files. Technically, the `scala_deps.toolchains()` call isn't required when only using the default `scala = True` parameter; the rules_scala `MODULE.bazel` will instantiate this automatically, too. * Add scala_toolchains macro for WORKSPACE, Bzlmod Extracted a single `scala_toolchains` macro to share between `WORKSPACE` and the `deps.bzl` module extension. This will make it easier to ensure `WORKSPACE` compatibility, and to add a Bazel module extension as a thin layer on top. Part of bazel-contrib#1482. This change includes updates to `rules_scala_setup` and `scala_repositories` to support this, while preserving compatibility with existing `WORKSPACE` calls. The next commit will replace many existing `WORKSPACE` calls with `scala_toolchains`. * Replace WORKSPACE calls with scala_toolchains() Also added `@io_bazel_rules_scala_toolchains//...:all` to `register_toolchains()` calls everywhere, even when not specifically necessary. This proves the mechanism is safe and works with `WORKSPACE` now, and will make future updates to consolidate other toolchains less noisy. * Remove obsolete WORKSPACE toolchain calls Should've been included in the previous commit. All tests still pass. * Replace scala_register_unused_deps_toolchains call Missed this one in third_party/test/proto earlier. Also removed unnecessary `USE_BAZEL_VERSION` expression in test_scala_proto_library.sh. If `USE_BAZEL_VERSION` is set, it takes precedence to begin with, and third_party/test/proto/.bazelversion exists now after bazel-contrib#1629. * Give scala_toolchains_repo a default name argument This turns out to be helpful when adapting `test_version/WORKSPACE.template` to the toolchainized version of `twitter_scrooge` for testing. In this case, we want `twitter_scooge` to be in its own customized repo, separate from the one generated by `scala_toolchains`. This seems like it might be generally useful when writing module extensions for alternative toolchains. * Update Scala toolchainizaion per @simuons in bazel-contrib#1633 - Removes an extraneous `compiler_sources_repo` call. - `scala_toolchains` will now _always_ create the main Scala toolchain repository (there's no longer an option to turn it off). - Registers `@io_bazel_rules_scala_toolchains//...:all` in `scala_register_toolchains. * Extract load_rules_dependencies macro Requested by @simuons in bazel-contrib#1633 to make `rules_scala_setup` and `scala_repositories` more readable while maintaining the existing APIs.
1 parent 23ae356 commit 43146ea

File tree

28 files changed

+317
-241
lines changed

28 files changed

+317
-241
lines changed

WORKSPACE

+8-11
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,16 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3939

4040
scala_config(enable_compiler_dependency_tracking = True)
4141

42-
load("//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories")
42+
load("//scala:scala.bzl", "scala_toolchains")
4343

44-
rules_scala_setup()
44+
scala_toolchains(fetch_sources = True)
4545

46-
rules_scala_toolchain_deps_repositories(fetch_sources = True)
46+
register_toolchains(
47+
"//testing:testing_toolchain",
48+
"//scala:unused_dependency_checker_error_toolchain",
49+
"//test/proto:scalapb_toolchain",
50+
"@io_bazel_rules_scala_toolchains//...:all",
51+
)
4752

4853
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
4954

@@ -82,8 +87,6 @@ load("//specs2:specs2_junit.bzl", "specs2_junit_repositories")
8287

8388
specs2_junit_repositories()
8489

85-
register_toolchains("//testing:testing_toolchain")
86-
8790
load("//scala/scalafmt:scalafmt_repositories.bzl", "scalafmt_default_config", "scalafmt_repositories")
8891

8992
scalafmt_default_config()
@@ -115,12 +118,6 @@ local_repository(
115118
path = "third_party/test/example_external_workspace",
116119
)
117120

118-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_unused_deps_toolchains")
119-
120-
scala_register_unused_deps_toolchains()
121-
122-
register_toolchains("@io_bazel_rules_scala//test/proto:scalapb_toolchain")
123-
124121
load("//scala:scala_maven_import_external.bzl", "java_import_external")
125122

126123
# bazel's java_import_external has been altered in rules_scala to be a macro based on jvm_import_external

dt_patches/test_dt_patches/WORKSPACE

+6-9
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,7 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3131

3232
scala_config(enable_compiler_dependency_tracking = True)
3333

34-
load(
35-
"@io_bazel_rules_scala//scala:scala.bzl",
36-
"rules_scala_setup",
37-
"rules_scala_toolchain_deps_repositories",
38-
)
34+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
3935
load(
4036
"@io_bazel_rules_scala//scala:scala_cross_version.bzl",
4137
"default_maven_server_urls",
@@ -104,14 +100,15 @@ scala_maven_import_external(
104100
server_urls = default_maven_server_urls(),
105101
)
106102

107-
rules_scala_setup()
108-
109-
rules_scala_toolchain_deps_repositories(
103+
scala_toolchains(
110104
fetch_sources = True,
111105
validate_scala_version = False,
112106
)
113107

114-
register_toolchains(":dt_scala_toolchain")
108+
register_toolchains(
109+
":dt_scala_toolchain",
110+
"@io_bazel_rules_scala_toolchains//...:all",
111+
)
115112

116113
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
117114

dt_patches/test_dt_patches_user_srcjar/WORKSPACE

+7-13
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,7 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3131

3232
scala_config(enable_compiler_dependency_tracking = True)
3333

34-
load(
35-
"@io_bazel_rules_scala//scala:scala.bzl",
36-
"rules_scala_setup",
37-
"rules_scala_toolchain_deps_repositories",
38-
)
34+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
3935
load(
4036
"@io_bazel_rules_scala//scala:scala_cross_version.bzl",
4137
"default_maven_server_urls",
@@ -182,14 +178,16 @@ srcjars_by_version = {
182178
},
183179
}
184180

185-
rules_scala_setup(scala_compiler_srcjar = srcjars_by_version[SCALA_VERSION])
186-
187-
rules_scala_toolchain_deps_repositories(
181+
scala_toolchains(
188182
fetch_sources = True,
183+
scala_compiler_srcjars = srcjars_by_version,
189184
validate_scala_version = False,
190185
)
191186

192-
register_toolchains(":dt_scala_toolchain")
187+
register_toolchains(
188+
":dt_scala_toolchain",
189+
"@io_bazel_rules_scala_toolchains//...:all",
190+
)
193191

194192
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
195193

@@ -206,7 +204,3 @@ rules_proto_toolchains()
206204
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
207205

208206
protobuf_deps()
209-
210-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
211-
212-
scala_register_toolchains()

examples/crossbuild/WORKSPACE

+3-11
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,11 @@ scala_config(
3838
],
3939
)
4040

41-
load(
42-
"@io_bazel_rules_scala//scala:scala.bzl",
43-
"rules_scala_setup",
44-
"rules_scala_toolchain_deps_repositories",
45-
)
41+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
4642

47-
rules_scala_setup()
43+
scala_toolchains()
4844

49-
rules_scala_toolchain_deps_repositories()
45+
register_toolchains("@io_bazel_rules_scala_toolchains//...:all")
5046

5147
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
5248

@@ -64,10 +60,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
6460

6561
protobuf_deps()
6662

67-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
68-
69-
scala_register_toolchains()
70-
7163
load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain")
7264

7365
scalatest_repositories()

examples/scala3/WORKSPACE

+3-11
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3131

3232
scala_config(scala_version = "3.5.2")
3333

34-
load(
35-
"@io_bazel_rules_scala//scala:scala.bzl",
36-
"rules_scala_setup",
37-
"rules_scala_toolchain_deps_repositories",
38-
)
34+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
3935

40-
rules_scala_setup()
36+
scala_toolchains(fetch_sources = True)
4137

42-
rules_scala_toolchain_deps_repositories(fetch_sources = True)
38+
register_toolchains("@io_bazel_rules_scala_toolchains//...:all")
4339

4440
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
4541

@@ -56,7 +52,3 @@ rules_proto_toolchains()
5652
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
5753

5854
protobuf_deps()
59-
60-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
61-
62-
scala_register_toolchains()

examples/semanticdb/WORKSPACE

+7-12
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3434

3535
scala_config(scala_version = "2.13.15")
3636

37-
load(
38-
"@io_bazel_rules_scala//scala:scala.bzl",
39-
"rules_scala_setup",
40-
"rules_scala_toolchain_deps_repositories",
41-
)
37+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
4238

43-
rules_scala_setup()
39+
scala_toolchains(fetch_sources = True)
4440

45-
rules_scala_toolchain_deps_repositories(fetch_sources = True)
41+
register_toolchains(
42+
#Register and use the custom toolchain that has semanticdb enabled
43+
"//:semanticdb_toolchain",
44+
"@io_bazel_rules_scala_toolchains//...:all",
45+
)
4646

4747
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
4848

@@ -59,8 +59,3 @@ rules_proto_toolchains()
5959
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
6060

6161
protobuf_deps()
62-
63-
#Register and use the custom toolchain that has semanticdb enabled
64-
register_toolchains(
65-
"//:semanticdb_toolchain",
66-
)

examples/testing/multi_frameworks_toolchain/WORKSPACE

+6-13
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3131

3232
scala_config()
3333

34-
load(
35-
"@io_bazel_rules_scala//scala:scala.bzl",
36-
"rules_scala_setup",
37-
"rules_scala_toolchain_deps_repositories",
38-
)
34+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
3935

40-
rules_scala_setup()
36+
scala_toolchains(fetch_sources = True)
4137

42-
rules_scala_toolchain_deps_repositories(fetch_sources = True)
38+
register_toolchains(
39+
":testing_toolchain",
40+
"@io_bazel_rules_scala_toolchains//...:all",
41+
)
4342

4443
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
4544

@@ -57,10 +56,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
5756

5857
protobuf_deps()
5958

60-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
61-
62-
scala_register_toolchains()
63-
6459
load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories")
6560
load("@io_bazel_rules_scala//testing:junit.bzl", "junit_repositories")
6661
load("@io_bazel_rules_scala//testing:specs2_junit.bzl", "specs2_junit_repositories")
@@ -70,5 +65,3 @@ scalatest_repositories()
7065
junit_repositories()
7166

7267
specs2_junit_repositories()
73-
74-
register_toolchains(":testing_toolchain")

examples/testing/scalatest_repositories/WORKSPACE

+3-11
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3131

3232
scala_config()
3333

34-
load(
35-
"@io_bazel_rules_scala//scala:scala.bzl",
36-
"rules_scala_setup",
37-
"rules_scala_toolchain_deps_repositories",
38-
)
34+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
3935

40-
rules_scala_setup()
36+
scala_toolchains(fetch_sources = True)
4137

42-
rules_scala_toolchain_deps_repositories(fetch_sources = True)
38+
register_toolchains("@io_bazel_rules_scala_toolchains//...:all")
4339

4440
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
4541

@@ -57,10 +53,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
5753

5854
protobuf_deps()
5955

60-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
61-
62-
scala_register_toolchains()
63-
6456
load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain")
6557

6658
scalatest_repositories()

examples/testing/specs2_junit_repositories/WORKSPACE

+3-11
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
3131

3232
scala_config()
3333

34-
load(
35-
"@io_bazel_rules_scala//scala:scala.bzl",
36-
"rules_scala_setup",
37-
"rules_scala_toolchain_deps_repositories",
38-
)
34+
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains")
3935

40-
rules_scala_setup()
36+
scala_toolchains(fetch_sources = True)
4137

42-
rules_scala_toolchain_deps_repositories(fetch_sources = True)
38+
register_toolchains("@io_bazel_rules_scala_toolchains//...:all")
4339

4440
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")
4541

@@ -57,10 +53,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
5753

5854
protobuf_deps()
5955

60-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
61-
62-
scala_register_toolchains()
63-
6456
load("@io_bazel_rules_scala//testing:specs2_junit.bzl", "specs2_junit_repositories", "specs2_junit_toolchain")
6557

6658
specs2_junit_repositories()

jmh/jmh.bzl

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
load("//scala:scala.bzl", "scala_binary", "scala_library")
1+
load("//scala/private:rules/scala_binary.bzl", "scala_binary")
2+
load("//scala/private:rules/scala_library.bzl", "scala_library")
23
load(
34
"//scala:scala_cross_version.bzl",
45
"default_maven_server_urls",

0 commit comments

Comments
 (0)