From b65058178d2c7a4f7685196c66fb5762c7dc42d9 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Tue, 22 Oct 2024 22:26:26 -0400 Subject: [PATCH 1/8] 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 #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. --- WORKSPACE | 9 +- dt_patches/test_dt_patches/WORKSPACE | 3 + .../test_dt_patches_user_srcjar/WORKSPACE | 3 + examples/crossbuild/WORKSPACE | 3 + examples/scala3/WORKSPACE | 3 + examples/semanticdb/WORKSPACE | 3 + .../multi_frameworks_toolchain/WORKSPACE | 3 + .../testing/scalatest_repositories/WORKSPACE | 3 + .../specs2_junit_repositories/WORKSPACE | 3 + scala/BUILD | 84 ++++++------------- scala/private/extensions/BUILD | 0 scala/private/extensions/toolchains.bzl | 75 +++++++++++++++++ .../private/macros/setup_scala_toolchain.bzl | 6 +- scala/scala.bzl | 25 +++--- scala/scala_cross_version.bzl | 5 ++ scala/scala_toolchain.bzl | 5 +- scala/toolchains.bzl | 5 +- test/shell/test_scala_binary.sh | 13 ++- test/toolchains/BUILD.bazel | 18 ++-- test_cross_build/WORKSPACE | 8 +- test_expect_failure/plus_one_deps/BUILD.bazel | 4 +- test_version/WORKSPACE.template | 8 +- .../test/example_external_workspace/WORKSPACE | 3 + third_party/test/proto/WORKSPACE | 8 +- 24 files changed, 202 insertions(+), 98 deletions(-) create mode 100644 scala/private/extensions/BUILD create mode 100644 scala/private/extensions/toolchains.bzl diff --git a/WORKSPACE b/WORKSPACE index 179f40d00..b00acd7f1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -39,12 +39,19 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config(enable_compiler_dependency_tracking = True) -load("//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories") +load( + "//scala:scala.bzl", + "rules_scala_setup", + "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", +) rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/dt_patches/test_dt_patches/WORKSPACE b/dt_patches/test_dt_patches/WORKSPACE index cdaea094a..74582d9d2 100644 --- a/dt_patches/test_dt_patches/WORKSPACE +++ b/dt_patches/test_dt_patches/WORKSPACE @@ -35,6 +35,7 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) load( "@io_bazel_rules_scala//scala:scala_cross_version.bzl", @@ -111,6 +112,8 @@ rules_scala_toolchain_deps_repositories( validate_scala_version = False, ) +scala_toolchains_repo() + register_toolchains(":dt_scala_toolchain") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/dt_patches/test_dt_patches_user_srcjar/WORKSPACE b/dt_patches/test_dt_patches_user_srcjar/WORKSPACE index d2c09c33c..6801687df 100644 --- a/dt_patches/test_dt_patches_user_srcjar/WORKSPACE +++ b/dt_patches/test_dt_patches_user_srcjar/WORKSPACE @@ -35,6 +35,7 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) load( "@io_bazel_rules_scala//scala:scala_cross_version.bzl", @@ -189,6 +190,8 @@ rules_scala_toolchain_deps_repositories( validate_scala_version = False, ) +scala_toolchains_repo() + register_toolchains(":dt_scala_toolchain") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/examples/crossbuild/WORKSPACE b/examples/crossbuild/WORKSPACE index 8e7883e9b..d48feb8c3 100644 --- a/examples/crossbuild/WORKSPACE +++ b/examples/crossbuild/WORKSPACE @@ -42,12 +42,15 @@ load( "@io_bazel_rules_scala//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() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/examples/scala3/WORKSPACE b/examples/scala3/WORKSPACE index fee68888c..a86107e87 100644 --- a/examples/scala3/WORKSPACE +++ b/examples/scala3/WORKSPACE @@ -35,12 +35,15 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/examples/semanticdb/WORKSPACE b/examples/semanticdb/WORKSPACE index a006e5e94..ee3c84160 100644 --- a/examples/semanticdb/WORKSPACE +++ b/examples/semanticdb/WORKSPACE @@ -38,12 +38,15 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/examples/testing/multi_frameworks_toolchain/WORKSPACE b/examples/testing/multi_frameworks_toolchain/WORKSPACE index 4bec8b471..5c76df4ec 100644 --- a/examples/testing/multi_frameworks_toolchain/WORKSPACE +++ b/examples/testing/multi_frameworks_toolchain/WORKSPACE @@ -35,12 +35,15 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/examples/testing/scalatest_repositories/WORKSPACE b/examples/testing/scalatest_repositories/WORKSPACE index 29ed0b2f6..569ac8083 100644 --- a/examples/testing/scalatest_repositories/WORKSPACE +++ b/examples/testing/scalatest_repositories/WORKSPACE @@ -35,12 +35,15 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/examples/testing/specs2_junit_repositories/WORKSPACE b/examples/testing/specs2_junit_repositories/WORKSPACE index 0b86bd604..9e6134608 100644 --- a/examples/testing/specs2_junit_repositories/WORKSPACE +++ b/examples/testing/specs2_junit_repositories/WORKSPACE @@ -35,12 +35,15 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/scala/BUILD b/scala/BUILD index bca7af135..7663b980a 100644 --- a/scala/BUILD +++ b/scala/BUILD @@ -1,43 +1,49 @@ -load("@rules_java//java:defs.bzl", "java_import", "java_library") -load("//scala:providers.bzl", "declare_deps_provider") load("//scala:scala_cross_version.bzl", "version_suffix") -load("//scala/private:macros/setup_scala_toolchain.bzl", "default_deps", "setup_scala_toolchain") -load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION", "SCALA_VERSIONS") +load("//scala:scala_toolchain.bzl", "scala_toolchain") +load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION") +load("@rules_java//java:defs.bzl", "java_import", "java_library") toolchain_type( name = "toolchain_type", visibility = ["//visibility:public"], ) -[ - setup_scala_toolchain( - name = "toolchain" + version_suffix(scala_version), - scala_version = scala_version, - use_argument_file_in_runner = True, - ) - for scala_version in SCALA_VERSIONS -] - # Alias for backward compatibility alias( name = "default_toolchain", - actual = "toolchain" + version_suffix(SCALA_VERSION), + actual = ( + "@io_bazel_rules_scala_toolchains//scala:toolchain" + + version_suffix(SCALA_VERSION) + ), ) -setup_scala_toolchain( - name = "unused_dependency_checker_error_toolchain", +scala_toolchain( + name = "unused_dependency_checker_error_toolchain_impl", dependency_tracking_method = "ast-plus", unused_dependency_checker_mode = "error", ) -setup_scala_toolchain( - name = "minimal_direct_source_deps", +scala_toolchain( + name = "minimal_direct_source_deps_impl", dependency_mode = "plus-one", dependency_tracking_method = "ast", strict_deps_mode = "error", unused_dependency_checker_mode = "error", ) +[ + toolchain( + name = tc, + toolchain = tc + "_impl", + toolchain_type = "//scala:toolchain_type", + visibility = ["//visibility:public"], + ) + for tc in [ + "unused_dependency_checker_error_toolchain", + "minimal_direct_source_deps", + ] +] + java_import( name = "bazel_test_runner_deploy", jars = ["@bazel_tools//tools/jdk:TestRunner_deploy.jar"], @@ -49,45 +55,3 @@ java_library( srcs = ["PlaceHolderClassToCreateEmptyJarForScalaImport.java"], visibility = ["//visibility:public"], ) - -declare_deps_provider( - name = "scala_compile_classpath_provider", - deps_id = "scala_compile_classpath", - visibility = ["//visibility:public"], - deps = default_deps("scala_compile_classpath", SCALA_VERSION), -) - -declare_deps_provider( - name = "scala_library_classpath_provider", - deps_id = "scala_library_classpath", - visibility = ["//visibility:public"], - deps = default_deps("scala_library_classpath", SCALA_VERSION), -) - -declare_deps_provider( - name = "scala_macro_classpath_provider", - deps_id = "scala_macro_classpath", - visibility = ["//visibility:public"], - deps = default_deps("scala_macro_classpath", SCALA_VERSION), -) - -declare_deps_provider( - name = "scala_xml_provider", - deps_id = "scala_xml", - visibility = ["//visibility:public"], - deps = default_deps("scala_xml", SCALA_VERSION), -) - -declare_deps_provider( - name = "parser_combinators_provider", - deps_id = "parser_combinators", - visibility = ["//visibility:public"], - deps = default_deps("parser_combinators", SCALA_VERSION), -) - -declare_deps_provider( - name = "semanticdb_provider", - deps_id = "semanticdb", - visibility = ["//visibility:public"], - deps = default_deps("semanticdb", SCALA_VERSION), -) diff --git a/scala/private/extensions/BUILD b/scala/private/extensions/BUILD new file mode 100644 index 000000000..e69de29bb diff --git a/scala/private/extensions/toolchains.bzl b/scala/private/extensions/toolchains.bzl new file mode 100644 index 000000000..9323c7226 --- /dev/null +++ b/scala/private/extensions/toolchains.bzl @@ -0,0 +1,75 @@ +"""Creates a repo containing Scala toolchain packages""" + +def _scala_toolchains_repo_impl(repository_ctx): + repo_attr = repository_ctx.attr + format_args = { + "rules_scala_repo": Label("//:all").repo_name, + } + toolchains = {} + + if repo_attr.scala: + toolchains["scala"] = _SCALA_TOOLCHAIN_BUILD + + if len(toolchains) == 0: + fail("no toolchains specified") + + for pkg, build in toolchains.items(): + repository_ctx.file( + pkg + "/BUILD", + content = build.format(**format_args), + executable = False, + ) + +_scala_toolchains_repo = repository_rule( + implementation = _scala_toolchains_repo_impl, + attrs = { + "scala": attr.bool(default = True), + }, +) + +def scala_toolchains_repo(**kwargs): + _scala_toolchains_repo( + name = "io_bazel_rules_scala_toolchains", + **kwargs + ) + +_SCALA_TOOLCHAIN_BUILD = """ +load( + "@@{rules_scala_repo}//scala/private:macros/setup_scala_toolchain.bzl", + "default_deps", + "setup_scala_toolchain", +) +load("@@{rules_scala_repo}//scala:providers.bzl", "declare_deps_provider") +load("@@{rules_scala_repo}//scala:scala_cross_version.bzl", "version_suffix") +load( + "@io_bazel_rules_scala_config//:config.bzl", + "SCALA_VERSION", + "SCALA_VERSIONS", +) + +[ + setup_scala_toolchain( + name = "toolchain" + version_suffix(scala_version), + scala_version = scala_version, + use_argument_file_in_runner = True, + ) + for scala_version in SCALA_VERSIONS +] + +[ + declare_deps_provider( + name = deps_id + "_provider", + deps_id = deps_id, + visibility = ["//visibility:public"], + deps = default_deps(deps_id, SCALA_VERSION), + ) + for deps_id in [ + "scala_xml", + "parser_combinators", + "scala_compile_classpath", + "scala_library_classpath", + "scala_macro_classpath", + "semanticdb", + ] +] +""" diff --git a/scala/private/macros/setup_scala_toolchain.bzl b/scala/private/macros/setup_scala_toolchain.bzl index fcb1ffa76..0ba136366 100644 --- a/scala/private/macros/setup_scala_toolchain.bzl +++ b/scala/private/macros/setup_scala_toolchain.bzl @@ -1,6 +1,6 @@ load("//scala:scala_toolchain.bzl", "scala_toolchain") load("//scala:providers.bzl", "declare_deps_provider") -load("//scala:scala_cross_version.bzl", "version_suffix") +load("//scala:scala_cross_version.bzl", "repositories", "version_suffix") load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION") def setup_scala_toolchain( @@ -97,7 +97,7 @@ def setup_scala_toolchain( native.toolchain( name = name, toolchain = ":%s_impl" % name, - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = Label("//scala:toolchain_type"), target_settings = ["@io_bazel_rules_scala_config//:scala_version" + version_suffix(scala_version)], visibility = visibility, ) @@ -155,4 +155,4 @@ _DEFAULT_DEPS = { def default_deps(deps_id, scala_version): versions = _DEFAULT_DEPS[deps_id] deps = versions.get("any", []) + versions.get(scala_version[0], []) - return [dep + version_suffix(scala_version) for dep in deps] + return repositories(scala_version, deps) diff --git a/scala/scala.bzl b/scala/scala.bzl index 269a2982e..6d2fd8d8e 100644 --- a/scala/scala.bzl +++ b/scala/scala.bzl @@ -1,49 +1,53 @@ load( - "@io_bazel_rules_scala//specs2:specs2_junit.bzl", + "//specs2:specs2_junit.bzl", _specs2_junit_dependencies = "specs2_junit_dependencies", ) load( - "@io_bazel_rules_scala//scala/private:macros/scala_repositories.bzl", + "//scala/private/extensions:toolchains.bzl", + _scala_toolchains_repo = "scala_toolchains_repo", +) +load( + "//scala/private:macros/scala_repositories.bzl", _rules_scala_setup = "rules_scala_setup", _rules_scala_toolchain_deps_repositories = "rules_scala_toolchain_deps_repositories", _scala_repositories = "scala_repositories", ) load( - "@io_bazel_rules_scala//scala/private:macros/setup_scala_toolchain.bzl", + "//scala/private:macros/setup_scala_toolchain.bzl", _setup_scala_toolchain = "setup_scala_toolchain", ) load( - "@io_bazel_rules_scala//scala/private:rules/scala_binary.bzl", + "//scala/private:rules/scala_binary.bzl", _scala_binary = "scala_binary", ) load( - "@io_bazel_rules_scala//scala/private:rules/scala_doc.bzl", + "//scala/private:rules/scala_doc.bzl", _ScaladocAspectInfo = "ScaladocAspectInfo", _make_scala_doc_rule = "make_scala_doc_rule", _scaladoc_intransitive_aspect = "scaladoc_intransitive_aspect", ) load( - "@io_bazel_rules_scala//scala/private:rules/scala_junit_test.bzl", + "//scala/private:rules/scala_junit_test.bzl", _scala_junit_test = "scala_junit_test", ) load( - "@io_bazel_rules_scala//scala/private:rules/scala_library.bzl", + "//scala/private:rules/scala_library.bzl", _scala_library = "scala_library", _scala_library_for_plugin_bootstrapping = "scala_library_for_plugin_bootstrapping", _scala_library_suite = "scala_library_suite", _scala_macro_library = "scala_macro_library", ) load( - "@io_bazel_rules_scala//scala/private:rules/scala_repl.bzl", + "//scala/private:rules/scala_repl.bzl", _scala_repl = "scala_repl", ) load( - "@io_bazel_rules_scala//scala/private:rules/scala_test.bzl", + "//scala/private:rules/scala_test.bzl", _scala_test = "scala_test", _scala_test_suite = "scala_test_suite", ) load( - "@io_bazel_rules_scala//testing:testing.bzl", + "//testing:testing.bzl", _setup_scala_testing_toolchain = "setup_scala_testing_toolchain", ) @@ -81,3 +85,4 @@ scala_test = _scala_test scala_test_suite = _scala_test_suite setup_scala_testing_toolchain = _setup_scala_testing_toolchain setup_scala_toolchain = _setup_scala_toolchain +scala_toolchains_repo = _scala_toolchains_repo diff --git a/scala/scala_cross_version.bzl b/scala/scala_cross_version.bzl index 2cb9327cf..ef965cda2 100644 --- a/scala/scala_cross_version.bzl +++ b/scala/scala_cross_version.bzl @@ -52,6 +52,11 @@ def sanitize_version(scala_version): def version_suffix(scala_version): return "_" + sanitize_version(scala_version) +def repositories(scala_version, repos): + """Adds the Scala version suffix to a list of repository IDs.""" + suffix = version_suffix(scala_version) + return [repo + suffix for repo in repos] + def _scala_version_transition_impl(settings, attr): if attr.scala_version: return {"@io_bazel_rules_scala_config//:scala_version": attr.scala_version} diff --git a/scala/scala_toolchain.bzl b/scala/scala_toolchain.bzl index 60da0783a..2eadbc41b 100644 --- a/scala/scala_toolchain.bzl +++ b/scala/scala_toolchain.bzl @@ -113,7 +113,10 @@ def _default_dep_providers(): ] if SCALA_MAJOR_VERSION.startswith("2."): dep_providers.append("semanticdb") - return [Label("//scala:%s_provider" % p) for p in dep_providers] + return [ + "@io_bazel_rules_scala_toolchains//scala:%s_provider" % p + for p in dep_providers + ] _scala_toolchain = rule( _scala_toolchain_impl, diff --git a/scala/toolchains.bzl b/scala/toolchains.bzl index 9cdedbdfa..bee91dbba 100644 --- a/scala/toolchains.bzl +++ b/scala/toolchains.bzl @@ -4,10 +4,11 @@ load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix") def scala_register_toolchains(): for scala_version in SCALA_VERSIONS: native.register_toolchains( - "@io_bazel_rules_scala//scala:toolchain" + version_suffix(scala_version), + "@io_bazel_rules_scala_toolchains//scala:toolchain" + + version_suffix(scala_version), ) def scala_register_unused_deps_toolchains(): native.register_toolchains( - "@io_bazel_rules_scala//scala:unused_dependency_checker_error_toolchain", + str(Label("//scala:unused_dependency_checker_error_toolchain")), ) diff --git a/test/shell/test_scala_binary.sh b/test/shell/test_scala_binary.sh index b562008f3..856711561 100755 --- a/test/shell/test_scala_binary.sh +++ b/test/shell/test_scala_binary.sh @@ -21,17 +21,16 @@ test_scala_binary_expect_failure_on_missing_direct_deps_located_in_dependency_wh test_scala_binary_allows_opt_in_to_use_of_argument_file_in_runner_for_improved_performance() { bazel run --extra_toolchains="//test/toolchains:use_argument_file_in_runner" //test/src/main/scala/scalarules/test/large_classpath:largeClasspath - grep "\"argsfile\" == \"argsfile\"" bazel-bin/test/src/main/scala/scalarules/test/large_classpath/largeClasspath - RESPONSE_CODE=$? - if [ $RESPONSE_CODE -ne 0 ]; then + local classpath_file="bazel-bin/test/src/main/scala/scalarules/test/large_classpath/largeClasspath" + local expected="\"argsfile\" == \"argsfile\"" + if [[ ! "$(< $classpath_file)" =~ $expected ]]; then echo -e "${RED} Binary script does not use the argument file. $NC" exit -1 fi bazel run //test/src/main/scala/scalarules/test/large_classpath:largeClasspath - grep "\"manifest\" == \"argsfile\"" bazel-bin/test/src/main/scala/scalarules/test/large_classpath/largeClasspath - RESPONSE_CODE=$? - if [ $RESPONSE_CODE -ne 0 ]; then + expected="\"manifest\" == \"argsfile\"" + if [[ ! "$(< $classpath_file)" =~ $expected ]]; then echo -e "${RED} Binary script does not use the classpath jar. $NC" exit -1 fi @@ -41,7 +40,7 @@ test_scala_binary_allows_opt_in_to_use_of_argument_file_in_runner_for_improved_p $runner test_scala_binary_expect_failure_on_missing_direct_deps $runner test_scala_binary_expect_failure_on_missing_direct_deps_located_in_dependency_which_is_scala_binary -if ! is_windows; then +if ! is_windows; then #rules_scala doesn't support argfiles on windows yet $runner test_scala_binary_allows_opt_in_to_use_of_argument_file_in_runner_for_improved_performance fi diff --git a/test/toolchains/BUILD.bazel b/test/toolchains/BUILD.bazel index ac77fb002..e0a20ac38 100644 --- a/test/toolchains/BUILD.bazel +++ b/test/toolchains/BUILD.bazel @@ -33,7 +33,7 @@ scala_toolchain( toolchain( name = "ast_plus_one_deps_unused_deps_warn", toolchain = "ast_plus_one_deps_unused_deps_warn_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -48,7 +48,7 @@ scala_toolchain( toolchain( name = "ast_plus_one_deps_unused_deps_error", toolchain = "ast_plus_one_deps_unused_deps_error_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -63,7 +63,7 @@ scala_toolchain( toolchain( name = "ast_plus_one_deps_strict_deps_warn", toolchain = "ast_plus_one_deps_strict_deps_warn_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -78,7 +78,7 @@ scala_toolchain( toolchain( name = "ast_plus_one_deps_strict_deps_error", toolchain = "ast_plus_one_deps_strict_deps_error_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -93,7 +93,7 @@ scala_toolchain( toolchain( name = "high_level_transitive_deps_strict_deps_warn", toolchain = "high_level_transitive_deps_strict_deps_warn_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -108,7 +108,7 @@ scala_toolchain( toolchain( name = "high_level_transitive_deps_strict_deps_error", toolchain = "high_level_transitive_deps_strict_deps_error_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -123,7 +123,7 @@ scala_toolchain( toolchain( name = "high_level_direct_deps", toolchain = "high_level_direct_deps_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -136,7 +136,7 @@ scala_toolchain( toolchain( name = "enable_stats_file_disabled_toolchain", toolchain = "enable_stats_file_disabled_toolchain_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -149,6 +149,6 @@ scala_toolchain( toolchain( name = "use_argument_file_in_runner", toolchain = "use_argument_file_in_runner_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) diff --git a/test_cross_build/WORKSPACE b/test_cross_build/WORKSPACE index 445e5de00..4dc143406 100644 --- a/test_cross_build/WORKSPACE +++ b/test_cross_build/WORKSPACE @@ -72,10 +72,16 @@ scala_config( ) # loads other rules Rules Scala depends on -load("@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_toolchain_deps_repositories") +load( + "@io_bazel_rules_scala//scala:scala.bzl", + "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", +) rules_scala_toolchain_deps_repositories() +scala_toolchains_repo() + load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() diff --git a/test_expect_failure/plus_one_deps/BUILD.bazel b/test_expect_failure/plus_one_deps/BUILD.bazel index 46ea72f32..f9143d228 100644 --- a/test_expect_failure/plus_one_deps/BUILD.bazel +++ b/test_expect_failure/plus_one_deps/BUILD.bazel @@ -9,7 +9,7 @@ scala_toolchain( toolchain( name = "plus_one_deps", toolchain = "plus_one_deps_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) @@ -23,6 +23,6 @@ scala_toolchain( toolchain( name = "plus_one_deps_with_unused_error", toolchain = "plus_one_deps_with_unused_error_impl", - toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type", + toolchain_type = "//scala:toolchain_type", visibility = ["//visibility:public"], ) diff --git a/test_version/WORKSPACE.template b/test_version/WORKSPACE.template index 42d2c4537..72b6ce65b 100644 --- a/test_version/WORKSPACE.template +++ b/test_version/WORKSPACE.template @@ -59,10 +59,16 @@ scala_config(enable_compiler_dependency_tracking = True) load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "extract_major_version") -load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories") +load( + "@io_bazel_rules_scala//scala:scala.bzl", + "scala_repositories", + "scala_toolchains_repo", +) scala_repositories(fetch_sources = True) +scala_toolchains_repo() + load(":scrooge_repositories.bzl", "scrooge_repositories") ${twitter_scrooge_repositories} load("@io_bazel_rules_scala//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge") diff --git a/third_party/test/example_external_workspace/WORKSPACE b/third_party/test/example_external_workspace/WORKSPACE index 541ab6c49..fc0d43d6a 100644 --- a/third_party/test/example_external_workspace/WORKSPACE +++ b/third_party/test/example_external_workspace/WORKSPACE @@ -35,12 +35,15 @@ load( "@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories", + "scala_toolchains_repo", ) rules_scala_setup() rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() diff --git a/third_party/test/proto/WORKSPACE b/third_party/test/proto/WORKSPACE index 736f5bbc5..b65809b9b 100644 --- a/third_party/test/proto/WORKSPACE +++ b/third_party/test/proto/WORKSPACE @@ -31,10 +31,16 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config() -load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories") +load( + "@io_bazel_rules_scala//scala:scala.bzl", + "scala_repositories", + "scala_toolchains_repo", +) scala_repositories() +scala_toolchains_repo() + load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") rules_proto_dependencies() From 85cc82a7a283ad0ce4b70b79a2d338d0ab6b488c Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Fri, 25 Oct 2024 15:11:24 -0400 Subject: [PATCH 2/8] 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 #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`. --- jmh/jmh.bzl | 3 +- scala/private/macros/scala_repositories.bzl | 43 +++++++++-- scala/private/macros/toolchains.bzl | 75 +++++++++++++++++++ .../toolchains_repo.bzl} | 2 +- scala/scala.bzl | 7 +- 5 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 scala/private/macros/toolchains.bzl rename scala/private/{extensions/toolchains.bzl => macros/toolchains_repo.bzl} (96%) diff --git a/jmh/jmh.bzl b/jmh/jmh.bzl index 2d6ee6a26..458e14674 100644 --- a/jmh/jmh.bzl +++ b/jmh/jmh.bzl @@ -1,4 +1,5 @@ -load("//scala:scala.bzl", "scala_binary", "scala_library") +load("//scala/private:rules/scala_binary.bzl", "scala_binary") +load("//scala/private:rules/scala_library.bzl", "scala_library") load( "//scala:scala_cross_version.bzl", "default_maven_server_urls", diff --git a/scala/private/macros/scala_repositories.bzl b/scala/private/macros/scala_repositories.bzl index c28e8e646..d0828af60 100644 --- a/scala/private/macros/scala_repositories.bzl +++ b/scala/private/macros/scala_repositories.bzl @@ -24,7 +24,6 @@ dt_patched_compiler = repository_rule( }, implementation = _dt_patched_compiler_impl, ) - _COMPILER_SOURCE_ALIAS_TEMPLATE = """alias( name = "src", visibility = ["//visibility:public"], @@ -75,9 +74,13 @@ def dt_patched_compiler_setup(scala_version, scala_compiler_srcjar = None): if scala_major_version == "2.12": if minor_version >= 1 and minor_version <= 7: - patch = Label("//dt_patches:dt_compiler_%s.1.patch" % scala_major_version) + patch = Label( + "//dt_patches:dt_compiler_%s.1.patch" % scala_major_version, + ) elif minor_version <= 11: - patch = Label("//dt_patches:dt_compiler_%s.8.patch" % scala_major_version) + patch = Label( + "//dt_patches:dt_compiler_%s.8.patch" % scala_major_version, + ) elif scala_major_version.startswith("3."): patch = Label("//dt_patches:dt_compiler_3.patch") @@ -114,7 +117,9 @@ def dt_patched_compiler_setup(scala_version, scala_compiler_srcjar = None): integrity = srcjar.get("integrity"), ) -def rules_scala_setup(scala_compiler_srcjar = None): +def rules_scala_setup( + scala_compiler_srcjar = None, + setup_compiler_sources = True): if not native.existing_rule("bazel_skylib"): http_archive( name = "bazel_skylib", @@ -167,8 +172,26 @@ def rules_scala_setup(scala_compiler_srcjar = None): url = "https://github.com/bazelbuild/rules_proto/releases/download/6.0.2/rules_proto-6.0.2.tar.gz", ) + if setup_compiler_sources: + srcs = {version: scala_compiler_srcjar for version in SCALA_VERSIONS} + _setup_scala_compiler_sources(srcs) + +def _setup_scala_compiler_sources(srcjars = {}): + """Generates Scala compiler source repos used internally by rules_scala. + + Args: + srcjars: optional dictionary of Scala version string to compiler srcjar + metadata dictionaries containing: + - exactly one "label", "url", or "urls" key + - optional "integrity" or "sha256" keys + """ for scala_version in SCALA_VERSIONS: - dt_patched_compiler_setup(scala_version, scala_compiler_srcjar) + dt_patched_compiler_setup(scala_version, srcjars.get(scala_version)) + + compiler_sources_repo( + name = "scala_compiler_sources", + scala_versions = SCALA_VERSIONS, + ) compiler_sources_repo( name = "scala_compiler_sources", @@ -235,13 +258,19 @@ def scala_repositories( overriden_artifacts = {}, load_dep_rules = True, load_jar_deps = True, - fetch_sources = False): + fetch_sources = False, + validate_scala_version = True, + scala_compiler_srcjars = {}): if load_dep_rules: - rules_scala_setup() + # When `WORKSPACE` goes away, so can this case. + rules_scala_setup(setup_compiler_sources = False) + + _setup_scala_compiler_sources(scala_compiler_srcjars) if load_jar_deps: rules_scala_toolchain_deps_repositories( maven_servers, overriden_artifacts, fetch_sources, + validate_scala_version, ) diff --git a/scala/private/macros/toolchains.bzl b/scala/private/macros/toolchains.bzl new file mode 100644 index 000000000..2b6c65897 --- /dev/null +++ b/scala/private/macros/toolchains.bzl @@ -0,0 +1,75 @@ +"""Macro to instantiate @io_bazel_rules_scala_toolchains""" + +load(":macros/toolchains_repo.bzl", "scala_toolchains_repo") +load("//scala/private:macros/scala_repositories.bzl", "scala_repositories") +load("//scala:scala_cross_version.bzl", "default_maven_server_urls") + +def scala_toolchains( + maven_servers = default_maven_server_urls(), + overridden_artifacts = {}, + load_rules_scala_dependencies = True, + load_scala_toolchain_dependencies = True, + fetch_sources = False, + validate_scala_version = True, + scala_compiler_srcjars = {}, + scala = True): + """Instantiates @io_bazel_rules_scala_toolchains and all its dependencies. + + Provides a unified interface to configuring rules_scala both directly in a + `WORKSPACE` file and in a Bazel module extension. + + Instantiates the `@io_bazel_rules_scala_toolchains` repository. Under + `WORKSPACE`, you will need to call `register_toolchains` at some point. + Under Bzlmod, rules_scala does this automatically. + + ```starlark + register_toolchains("@io_bazel_rules_scala_toolchains//...:all") + ``` + + All arguments are optional. + + Args: + maven_servers: Maven servers used to fetch dependency jar files + overridden_artifacts: specific dependency jar files to use instead of + those from `maven_servers`, in the format: + ```starlark + "repo_name": { + "artifact": "", + "sha256": "", + "deps": [ + "repository_names_of_dependencies", + ], + } + ``` + load_rules_scala_dependencies: whether load rules_scala repository + dependencies + load_scala_toolchain_dependencies: whether to load repository + dependencies of the core Scala language toolchain + fetch_sources: whether to download dependency source jars + validate_scala_version: whether to check if the configured Scala version + matches the default version supported by rules_scala + scala_compiler_srcjars: optional dictionary of Scala version string to + compiler srcjar metadata dictionaries containing: + - exactly one "label", "url", or "urls" key + - optional "integrity" or "sha256" keys + scala: whether to instantiate the core Scala toolchain + """ + num_toolchains = 0 + + if scala: + num_toolchains += 1 + scala_repositories( + maven_servers = maven_servers, + # Note the internal macro parameter misspells "overriden". + overriden_artifacts = overridden_artifacts, + load_dep_rules = load_rules_scala_dependencies, + load_jar_deps = load_scala_toolchain_dependencies, + fetch_sources = fetch_sources, + validate_scala_version = validate_scala_version, + scala_compiler_srcjars = scala_compiler_srcjars, + ) + + if num_toolchains != 0: + scala_toolchains_repo( + scala = scala, + ) diff --git a/scala/private/extensions/toolchains.bzl b/scala/private/macros/toolchains_repo.bzl similarity index 96% rename from scala/private/extensions/toolchains.bzl rename to scala/private/macros/toolchains_repo.bzl index 9323c7226..545cc051b 100644 --- a/scala/private/extensions/toolchains.bzl +++ b/scala/private/macros/toolchains_repo.bzl @@ -1,4 +1,4 @@ -"""Creates a repo containing Scala toolchain packages""" +"""Repository rule to instantiate @io_bazel_rules_scala_toolchains""" def _scala_toolchains_repo_impl(repository_ctx): repo_attr = repository_ctx.attr diff --git a/scala/scala.bzl b/scala/scala.bzl index 6d2fd8d8e..54588ecc8 100644 --- a/scala/scala.bzl +++ b/scala/scala.bzl @@ -3,7 +3,11 @@ load( _specs2_junit_dependencies = "specs2_junit_dependencies", ) load( - "//scala/private/extensions:toolchains.bzl", + "//scala/private:macros/toolchains.bzl", + _scala_toolchains = "scala_toolchains", +) +load( + "//scala/private:macros/toolchains_repo.bzl", _scala_toolchains_repo = "scala_toolchains_repo", ) load( @@ -85,4 +89,5 @@ scala_test = _scala_test scala_test_suite = _scala_test_suite setup_scala_testing_toolchain = _setup_scala_testing_toolchain setup_scala_toolchain = _setup_scala_toolchain +scala_toolchains = _scala_toolchains scala_toolchains_repo = _scala_toolchains_repo From ce6398822736af4b622eb182ab6478da3824f807 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Fri, 25 Oct 2024 19:11:18 -0400 Subject: [PATCH 3/8] 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. --- WORKSPACE | 26 ++++++------------- dt_patches/test_dt_patches/WORKSPACE | 18 +++++-------- .../test_dt_patches_user_srcjar/WORKSPACE | 23 +++++----------- examples/crossbuild/WORKSPACE | 13 +++------- examples/scala3/WORKSPACE | 13 +++------- examples/semanticdb/WORKSPACE | 22 +++++----------- .../multi_frameworks_toolchain/WORKSPACE | 18 +++++-------- .../testing/scalatest_repositories/WORKSPACE | 13 +++------- .../specs2_junit_repositories/WORKSPACE | 13 +++------- test_cross_build/WORKSPACE | 14 +++------- test_version/WORKSPACE.template | 22 +++++++++------- .../test/example_external_workspace/WORKSPACE | 13 +++------- third_party/test/proto/WORKSPACE | 10 +++---- 13 files changed, 67 insertions(+), 151 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index b00acd7f1..96628c248 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -39,18 +39,16 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config(enable_compiler_dependency_tracking = True) -load( - "//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) +load("//scala:scala.bzl", "scala_toolchains") -rules_scala_setup() +scala_toolchains(fetch_sources = True) -rules_scala_toolchain_deps_repositories(fetch_sources = True) - -scala_toolchains_repo() +register_toolchains( + "//testing:testing_toolchain", + "//scala:unused_dependency_checker_error_toolchain", + "//test/proto:scalapb_toolchain", + "@io_bazel_rules_scala_toolchains//...:all", +) load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") @@ -89,8 +87,6 @@ load("//specs2:specs2_junit.bzl", "specs2_junit_repositories") specs2_junit_repositories() -register_toolchains("//testing:testing_toolchain") - load("//scala/scalafmt:scalafmt_repositories.bzl", "scalafmt_default_config", "scalafmt_repositories") scalafmt_default_config() @@ -122,12 +118,6 @@ local_repository( path = "third_party/test/example_external_workspace", ) -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_unused_deps_toolchains") - -scala_register_unused_deps_toolchains() - -register_toolchains("@io_bazel_rules_scala//test/proto:scalapb_toolchain") - load("//scala:scala_maven_import_external.bzl", "java_import_external") # bazel's java_import_external has been altered in rules_scala to be a macro based on jvm_import_external diff --git a/dt_patches/test_dt_patches/WORKSPACE b/dt_patches/test_dt_patches/WORKSPACE index 74582d9d2..cac85b0d6 100644 --- a/dt_patches/test_dt_patches/WORKSPACE +++ b/dt_patches/test_dt_patches/WORKSPACE @@ -31,12 +31,7 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config(enable_compiler_dependency_tracking = True) -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") load( "@io_bazel_rules_scala//scala:scala_cross_version.bzl", "default_maven_server_urls", @@ -105,16 +100,15 @@ scala_maven_import_external( server_urls = default_maven_server_urls(), ) -rules_scala_setup() - -rules_scala_toolchain_deps_repositories( +scala_toolchains( fetch_sources = True, validate_scala_version = False, ) -scala_toolchains_repo() - -register_toolchains(":dt_scala_toolchain") +register_toolchains( + ":dt_scala_toolchain", + "@io_bazel_rules_scala_toolchains//...:all", +) load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/dt_patches/test_dt_patches_user_srcjar/WORKSPACE b/dt_patches/test_dt_patches_user_srcjar/WORKSPACE index 6801687df..278e44a5d 100644 --- a/dt_patches/test_dt_patches_user_srcjar/WORKSPACE +++ b/dt_patches/test_dt_patches_user_srcjar/WORKSPACE @@ -31,12 +31,7 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config(enable_compiler_dependency_tracking = True) -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") load( "@io_bazel_rules_scala//scala:scala_cross_version.bzl", "default_maven_server_urls", @@ -183,16 +178,16 @@ srcjars_by_version = { }, } -rules_scala_setup(scala_compiler_srcjar = srcjars_by_version[SCALA_VERSION]) - -rules_scala_toolchain_deps_repositories( +scala_toolchains( fetch_sources = True, + scala_compiler_srcjars = srcjars_by_version, validate_scala_version = False, ) -scala_toolchains_repo() - -register_toolchains(":dt_scala_toolchain") +register_toolchains( + ":dt_scala_toolchain", + "@io_bazel_rules_scala_toolchains//...:all", +) load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") @@ -209,7 +204,3 @@ rules_proto_toolchains() load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() - -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") - -scala_register_toolchains() diff --git a/examples/crossbuild/WORKSPACE b/examples/crossbuild/WORKSPACE index d48feb8c3..c5c7cf64b 100644 --- a/examples/crossbuild/WORKSPACE +++ b/examples/crossbuild/WORKSPACE @@ -38,18 +38,11 @@ scala_config( ], ) -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_setup() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -rules_scala_toolchain_deps_repositories() +scala_toolchains() -scala_toolchains_repo() +register_toolchains("@io_bazel_rules_scala_toolchains//...:all") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/examples/scala3/WORKSPACE b/examples/scala3/WORKSPACE index a86107e87..36a656cd7 100644 --- a/examples/scala3/WORKSPACE +++ b/examples/scala3/WORKSPACE @@ -31,18 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config(scala_version = "3.5.2") -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_setup() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains(fetch_sources = True) -scala_toolchains_repo() +register_toolchains("@io_bazel_rules_scala_toolchains//...:all") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/examples/semanticdb/WORKSPACE b/examples/semanticdb/WORKSPACE index ee3c84160..72ae37bd5 100644 --- a/examples/semanticdb/WORKSPACE +++ b/examples/semanticdb/WORKSPACE @@ -34,18 +34,15 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config(scala_version = "2.13.15") -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_setup() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains(fetch_sources = True) -scala_toolchains_repo() +register_toolchains( + #Register and use the custom toolchain that has semanticdb enabled + "//:semanticdb_toolchain", + "@io_bazel_rules_scala_toolchains//...:all", +) load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") @@ -62,8 +59,3 @@ rules_proto_toolchains() load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() - -#Register and use the custom toolchain that has semanticdb enabled -register_toolchains( - "//:semanticdb_toolchain", -) diff --git a/examples/testing/multi_frameworks_toolchain/WORKSPACE b/examples/testing/multi_frameworks_toolchain/WORKSPACE index 5c76df4ec..8e69c8b30 100644 --- a/examples/testing/multi_frameworks_toolchain/WORKSPACE +++ b/examples/testing/multi_frameworks_toolchain/WORKSPACE @@ -31,18 +31,14 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config() -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_setup() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains(fetch_sources = True) -scala_toolchains_repo() +register_toolchains( + ":testing_toolchain", + "@io_bazel_rules_scala_toolchains//...:all", +) load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") @@ -73,5 +69,3 @@ scalatest_repositories() junit_repositories() specs2_junit_repositories() - -register_toolchains(":testing_toolchain") diff --git a/examples/testing/scalatest_repositories/WORKSPACE b/examples/testing/scalatest_repositories/WORKSPACE index 569ac8083..26702521c 100644 --- a/examples/testing/scalatest_repositories/WORKSPACE +++ b/examples/testing/scalatest_repositories/WORKSPACE @@ -31,18 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config() -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_setup() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains(fetch_sources = True) -scala_toolchains_repo() +register_toolchains("@io_bazel_rules_scala_toolchains//...:all") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/examples/testing/specs2_junit_repositories/WORKSPACE b/examples/testing/specs2_junit_repositories/WORKSPACE index 9e6134608..0e3f08e74 100644 --- a/examples/testing/specs2_junit_repositories/WORKSPACE +++ b/examples/testing/specs2_junit_repositories/WORKSPACE @@ -31,18 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config() -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_setup() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains(fetch_sources = True) -scala_toolchains_repo() +register_toolchains("@io_bazel_rules_scala_toolchains//...:all") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/test_cross_build/WORKSPACE b/test_cross_build/WORKSPACE index 4dc143406..5e33f222c 100644 --- a/test_cross_build/WORKSPACE +++ b/test_cross_build/WORKSPACE @@ -72,19 +72,11 @@ scala_config( ) # loads other rules Rules Scala depends on -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_toolchain_deps_repositories() - -scala_toolchains_repo() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") +scala_toolchains() -scala_register_toolchains() +register_toolchains("@io_bazel_rules_scala_toolchains//...:all") load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain") diff --git a/test_version/WORKSPACE.template b/test_version/WORKSPACE.template index 72b6ce65b..4145507e1 100644 --- a/test_version/WORKSPACE.template +++ b/test_version/WORKSPACE.template @@ -59,16 +59,24 @@ scala_config(enable_compiler_dependency_tracking = True) load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "extract_major_version") +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") + +scala_toolchains(fetch_sources = True) + +register_toolchains() +register_toolchains( + "@io_bazel_rules_scala//scala:unused_dependency_checker_error_toolchain", + "@io_bazel_rules_scala//testing:testing_toolchain", + "@io_bazel_rules_scala_toolchains//...:all", +) + + load( "@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories", "scala_toolchains_repo", ) -scala_repositories(fetch_sources = True) - -scala_toolchains_repo() - load(":scrooge_repositories.bzl", "scrooge_repositories") ${twitter_scrooge_repositories} load("@io_bazel_rules_scala//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge") @@ -89,9 +97,3 @@ specs2_junit_repositories() load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain") scalatest_repositories() - -register_toolchains("@io_bazel_rules_scala//testing:testing_toolchain") - -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_unused_deps_toolchains") - -scala_register_unused_deps_toolchains() diff --git a/third_party/test/example_external_workspace/WORKSPACE b/third_party/test/example_external_workspace/WORKSPACE index fc0d43d6a..abc6a8910 100644 --- a/third_party/test/example_external_workspace/WORKSPACE +++ b/third_party/test/example_external_workspace/WORKSPACE @@ -31,18 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config() -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "rules_scala_setup", - "rules_scala_toolchain_deps_repositories", - "scala_toolchains_repo", -) - -rules_scala_setup() +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -rules_scala_toolchain_deps_repositories(fetch_sources = True) +scala_toolchains(fetch_sources = True) -scala_toolchains_repo() +register_toolchains("@io_bazel_rules_scala_toolchains//...:all") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") diff --git a/third_party/test/proto/WORKSPACE b/third_party/test/proto/WORKSPACE index b65809b9b..794c36e54 100644 --- a/third_party/test/proto/WORKSPACE +++ b/third_party/test/proto/WORKSPACE @@ -31,15 +31,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") scala_config() -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "scala_repositories", - "scala_toolchains_repo", -) +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") -scala_repositories() +scala_toolchains() -scala_toolchains_repo() +register_toolchains("@io_bazel_rules_scala_toolchains//...:all") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") From 90158262c8b58cf6d806d7a08dd9923b89ee3943 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Sat, 26 Oct 2024 13:39:43 -0400 Subject: [PATCH 4/8] Remove obsolete WORKSPACE toolchain calls Should've been included in the previous commit. All tests still pass. --- examples/crossbuild/WORKSPACE | 4 ---- examples/scala3/WORKSPACE | 4 ---- examples/testing/multi_frameworks_toolchain/WORKSPACE | 4 ---- examples/testing/scalatest_repositories/WORKSPACE | 4 ---- examples/testing/specs2_junit_repositories/WORKSPACE | 4 ---- test_version/WORKSPACE.template | 8 -------- third_party/test/example_external_workspace/WORKSPACE | 4 ---- 7 files changed, 32 deletions(-) diff --git a/examples/crossbuild/WORKSPACE b/examples/crossbuild/WORKSPACE index c5c7cf64b..8cd4ef857 100644 --- a/examples/crossbuild/WORKSPACE +++ b/examples/crossbuild/WORKSPACE @@ -60,10 +60,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") - -scala_register_toolchains() - load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain") scalatest_repositories() diff --git a/examples/scala3/WORKSPACE b/examples/scala3/WORKSPACE index 36a656cd7..a98255c50 100644 --- a/examples/scala3/WORKSPACE +++ b/examples/scala3/WORKSPACE @@ -52,7 +52,3 @@ rules_proto_toolchains() load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() - -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") - -scala_register_toolchains() diff --git a/examples/testing/multi_frameworks_toolchain/WORKSPACE b/examples/testing/multi_frameworks_toolchain/WORKSPACE index 8e69c8b30..2712dfaea 100644 --- a/examples/testing/multi_frameworks_toolchain/WORKSPACE +++ b/examples/testing/multi_frameworks_toolchain/WORKSPACE @@ -56,10 +56,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") - -scala_register_toolchains() - load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories") load("@io_bazel_rules_scala//testing:junit.bzl", "junit_repositories") load("@io_bazel_rules_scala//testing:specs2_junit.bzl", "specs2_junit_repositories") diff --git a/examples/testing/scalatest_repositories/WORKSPACE b/examples/testing/scalatest_repositories/WORKSPACE index 26702521c..d74bf5eae 100644 --- a/examples/testing/scalatest_repositories/WORKSPACE +++ b/examples/testing/scalatest_repositories/WORKSPACE @@ -53,10 +53,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") - -scala_register_toolchains() - load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain") scalatest_repositories() diff --git a/examples/testing/specs2_junit_repositories/WORKSPACE b/examples/testing/specs2_junit_repositories/WORKSPACE index 0e3f08e74..6d5fb0649 100644 --- a/examples/testing/specs2_junit_repositories/WORKSPACE +++ b/examples/testing/specs2_junit_repositories/WORKSPACE @@ -53,10 +53,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") - -scala_register_toolchains() - load("@io_bazel_rules_scala//testing:specs2_junit.bzl", "specs2_junit_repositories", "specs2_junit_toolchain") specs2_junit_repositories() diff --git a/test_version/WORKSPACE.template b/test_version/WORKSPACE.template index 4145507e1..280ce826c 100644 --- a/test_version/WORKSPACE.template +++ b/test_version/WORKSPACE.template @@ -63,20 +63,12 @@ load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") scala_toolchains(fetch_sources = True) -register_toolchains() register_toolchains( "@io_bazel_rules_scala//scala:unused_dependency_checker_error_toolchain", "@io_bazel_rules_scala//testing:testing_toolchain", "@io_bazel_rules_scala_toolchains//...:all", ) - -load( - "@io_bazel_rules_scala//scala:scala.bzl", - "scala_repositories", - "scala_toolchains_repo", -) - load(":scrooge_repositories.bzl", "scrooge_repositories") ${twitter_scrooge_repositories} load("@io_bazel_rules_scala//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge") diff --git a/third_party/test/example_external_workspace/WORKSPACE b/third_party/test/example_external_workspace/WORKSPACE index abc6a8910..0e69d76b2 100644 --- a/third_party/test/example_external_workspace/WORKSPACE +++ b/third_party/test/example_external_workspace/WORKSPACE @@ -53,10 +53,6 @@ load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") - -scala_register_toolchains() - load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain") scalatest_repositories() From 3a5f7b7d143acd311719c442e22f41e6f6126c92 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Sat, 26 Oct 2024 14:00:55 -0400 Subject: [PATCH 5/8] 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 #1629. --- test/shell/test_scala_proto_library.sh | 1 - third_party/test/proto/WORKSPACE | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/test/shell/test_scala_proto_library.sh b/test/shell/test_scala_proto_library.sh index 48e9e5586..2b95c7881 100755 --- a/test/shell/test_scala_proto_library.sh +++ b/test/shell/test_scala_proto_library.sh @@ -28,7 +28,6 @@ test_scala_proto_show_generator_exception() { --extra_toolchains=//test/proto/custom_generator:failing_scala_proto_toolchain } -export USE_BAZEL_VERSION=${USE_BAZEL_VERSION:-$(cat $dir/../../.bazelversion)} $runner test_scala_proto_library_action_label $runner test_scala_proto_custom_generator $runner test_scala_proto_show_generator_exception diff --git a/third_party/test/proto/WORKSPACE b/third_party/test/proto/WORKSPACE index 794c36e54..12cb91cb3 100644 --- a/third_party/test/proto/WORKSPACE +++ b/third_party/test/proto/WORKSPACE @@ -35,7 +35,10 @@ load("@io_bazel_rules_scala//scala:scala.bzl", "scala_toolchains") scala_toolchains() -register_toolchains("@io_bazel_rules_scala_toolchains//...:all") +register_toolchains( + "@io_bazel_rules_scala//scala:unused_dependency_checker_error_toolchain", + "@io_bazel_rules_scala_toolchains//...:all", +) load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies") @@ -60,7 +63,3 @@ scala_proto_repositories() load("@io_bazel_rules_scala//scala_proto:toolchains.bzl", "scala_proto_register_toolchains") scala_proto_register_toolchains() - -load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_unused_deps_toolchains") - -scala_register_unused_deps_toolchains() From 04a246ca80f6f3dd83c4b60d00c3cc0580adf288 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Sun, 27 Oct 2024 21:51:56 -0400 Subject: [PATCH 6/8] 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. --- scala/private/macros/toolchains_repo.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scala/private/macros/toolchains_repo.bzl b/scala/private/macros/toolchains_repo.bzl index 545cc051b..2ee1cb7df 100644 --- a/scala/private/macros/toolchains_repo.bzl +++ b/scala/private/macros/toolchains_repo.bzl @@ -27,9 +27,9 @@ _scala_toolchains_repo = repository_rule( }, ) -def scala_toolchains_repo(**kwargs): +def scala_toolchains_repo(name = "io_bazel_rules_scala_toolchains", **kwargs): _scala_toolchains_repo( - name = "io_bazel_rules_scala_toolchains", + name = name, **kwargs ) From 6a2f39b75b4989c00062f32daa2cb99d0bceb549 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Fri, 8 Nov 2024 13:56:08 -0500 Subject: [PATCH 7/8] Update Scala toolchainizaion per @simuons in #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. --- scala/private/macros/scala_repositories.bzl | 5 ---- scala/private/macros/toolchains.bzl | 33 ++++++++------------- scala/toolchains.bzl | 9 +----- 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/scala/private/macros/scala_repositories.bzl b/scala/private/macros/scala_repositories.bzl index d0828af60..5facce515 100644 --- a/scala/private/macros/scala_repositories.bzl +++ b/scala/private/macros/scala_repositories.bzl @@ -193,11 +193,6 @@ def _setup_scala_compiler_sources(srcjars = {}): scala_versions = SCALA_VERSIONS, ) - compiler_sources_repo( - name = "scala_compiler_sources", - scala_versions = SCALA_VERSIONS, - ) - def _artifact_ids(scala_version): result = [ "io_bazel_rules_scala_scala_compiler", diff --git a/scala/private/macros/toolchains.bzl b/scala/private/macros/toolchains.bzl index 2b6c65897..70a4c0959 100644 --- a/scala/private/macros/toolchains.bzl +++ b/scala/private/macros/toolchains.bzl @@ -11,8 +11,7 @@ def scala_toolchains( load_scala_toolchain_dependencies = True, fetch_sources = False, validate_scala_version = True, - scala_compiler_srcjars = {}, - scala = True): + scala_compiler_srcjars = {}): """Instantiates @io_bazel_rules_scala_toolchains and all its dependencies. Provides a unified interface to configuring rules_scala both directly in a @@ -52,24 +51,16 @@ def scala_toolchains( compiler srcjar metadata dictionaries containing: - exactly one "label", "url", or "urls" key - optional "integrity" or "sha256" keys - scala: whether to instantiate the core Scala toolchain """ - num_toolchains = 0 + scala_repositories( + maven_servers = maven_servers, + # Note the internal macro parameter misspells "overriden". + overriden_artifacts = overridden_artifacts, + load_dep_rules = load_rules_scala_dependencies, + load_jar_deps = load_scala_toolchain_dependencies, + fetch_sources = fetch_sources, + validate_scala_version = validate_scala_version, + scala_compiler_srcjars = scala_compiler_srcjars, + ) - if scala: - num_toolchains += 1 - scala_repositories( - maven_servers = maven_servers, - # Note the internal macro parameter misspells "overriden". - overriden_artifacts = overridden_artifacts, - load_dep_rules = load_rules_scala_dependencies, - load_jar_deps = load_scala_toolchain_dependencies, - fetch_sources = fetch_sources, - validate_scala_version = validate_scala_version, - scala_compiler_srcjars = scala_compiler_srcjars, - ) - - if num_toolchains != 0: - scala_toolchains_repo( - scala = scala, - ) + scala_toolchains_repo() diff --git a/scala/toolchains.bzl b/scala/toolchains.bzl index bee91dbba..eebdb7453 100644 --- a/scala/toolchains.bzl +++ b/scala/toolchains.bzl @@ -1,12 +1,5 @@ -load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS") -load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix") - def scala_register_toolchains(): - for scala_version in SCALA_VERSIONS: - native.register_toolchains( - "@io_bazel_rules_scala_toolchains//scala:toolchain" + - version_suffix(scala_version), - ) + native.register_toolchains("@io_bazel_rules_scala_toolchains//...:all") def scala_register_unused_deps_toolchains(): native.register_toolchains( From 297645d91967acbf8bcc32af8c2aa87420c16b58 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Tue, 12 Nov 2024 10:17:31 -0500 Subject: [PATCH 8/8] Extract load_rules_dependencies macro Requested by @simuons in #1633 to make `rules_scala_setup` and `scala_repositories` more readable while maintaining the existing APIs. --- scala/private/macros/scala_repositories.bzl | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/scala/private/macros/scala_repositories.bzl b/scala/private/macros/scala_repositories.bzl index 5facce515..090839ee0 100644 --- a/scala/private/macros/scala_repositories.bzl +++ b/scala/private/macros/scala_repositories.bzl @@ -117,9 +117,7 @@ def dt_patched_compiler_setup(scala_version, scala_compiler_srcjar = None): integrity = srcjar.get("integrity"), ) -def rules_scala_setup( - scala_compiler_srcjar = None, - setup_compiler_sources = True): +def load_rules_dependencies(): if not native.existing_rule("bazel_skylib"): http_archive( name = "bazel_skylib", @@ -172,11 +170,7 @@ def rules_scala_setup( url = "https://github.com/bazelbuild/rules_proto/releases/download/6.0.2/rules_proto-6.0.2.tar.gz", ) - if setup_compiler_sources: - srcs = {version: scala_compiler_srcjar for version in SCALA_VERSIONS} - _setup_scala_compiler_sources(srcs) - -def _setup_scala_compiler_sources(srcjars = {}): +def setup_scala_compiler_sources(srcjars = {}): """Generates Scala compiler source repos used internally by rules_scala. Args: @@ -193,6 +187,13 @@ def _setup_scala_compiler_sources(srcjars = {}): scala_versions = SCALA_VERSIONS, ) +def rules_scala_setup(scala_compiler_srcjar = None): + load_rules_dependencies() + setup_scala_compiler_sources({ + version: scala_compiler_srcjar + for version in SCALA_VERSIONS + }) + def _artifact_ids(scala_version): result = [ "io_bazel_rules_scala_scala_compiler", @@ -258,9 +259,9 @@ def scala_repositories( scala_compiler_srcjars = {}): if load_dep_rules: # When `WORKSPACE` goes away, so can this case. - rules_scala_setup(setup_compiler_sources = False) + load_rules_dependencies() - _setup_scala_compiler_sources(scala_compiler_srcjars) + setup_scala_compiler_sources(scala_compiler_srcjars) if load_jar_deps: rules_scala_toolchain_deps_repositories(