Skip to content

Commit

Permalink
Some progress towards bzlmod support
Browse files Browse the repository at this point in the history
  • Loading branch information
agluszak committed Aug 7, 2024
1 parent 579edc1 commit 344107c
Show file tree
Hide file tree
Showing 9 changed files with 77 additions and 79 deletions.
5 changes: 5 additions & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
dt_patches/test_dt_patches
dt_patches/test_dt_patches_user_srcjar
test_version
test_cross_build
examples
2 changes: 1 addition & 1 deletion .bazelversion
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6.3.0
7.2.1
48 changes: 35 additions & 13 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -1,27 +1,49 @@
module(name = "io_bazel_rules_scala")

bazel_dep(name = "bazel_skylib", version = "1.4.1")
bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "rules_cc", version = "0.0.6")
bazel_dep(name = "rules_java", version = "5.5.0")
bazel_dep(name = "rules_proto", version = "5.3.0-21.7")
bazel_dep(name = "rules_java", version = "7.8.0")
bazel_dep(name = "rules_proto", version = "6.0.2")
bazel_dep(name = "bazel_features", version = "1.14.0")
bazel_dep(name = "protobuf", version = "27.3", repo_name = "com_google_protobuf")
bazel_dep(name = "platforms", version = "0.0.10")
bazel_dep(name = "rules_python", version = "0.34.0", dev_dependency = True)

single_version_override(
module_name = "bazel_features",
version = "1.14.0",
)

version = use_extension("@bazel_features//private:extensions.bzl", "version_extension")
use_repo(version, "bazel_features_globals", "bazel_features_version")

bazel_dep(name = "rules_go", version = "0.39.1")

bazel_dep(name = "buildtools", repo_name = "com_github_bazelbuild_buildtools")

git_override(
module_name = "buildtools",
remote = "https://github.com/bazelbuild/buildtools.git",
commit = "37932ddd72301f8ca6075ee6b24e9e5d333c96a5"
)

use_repo(
use_extension("//:extensions/scala_config_ext.bzl", "scala_config_dep"),
"io_bazel_rules_scala_config"
)

non_module_deps = use_extension("//:extensions/non_module_deps.bzl", "non_module_deps")
use_repo(non_module_deps, "scala_compiler_source")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_library")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_compiler")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_xml")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_parser_combinators")
use_repo(non_module_deps, "scala_compiler_source_2_12_18")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_library_2_12_18")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_compiler_2_12_18")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_xml_2_12_18")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_parser_combinators_2_12_18")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_interfaces")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_reflect")
use_repo(non_module_deps, "org_scalameta_semanticdb_scalac")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_tasty_core")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_asm")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_library_2")
use_repo(non_module_deps, "io_bazel_rules_scala_scala_reflect_2_12_18")
use_repo(non_module_deps, "org_scalameta_semanticdb_scalac_2_12_18")
# use_repo(non_module_deps, "io_bazel_rules_scala_scala_tasty_core")
# use_repo(non_module_deps, "io_bazel_rules_scala_scala_asm")
# use_repo(non_module_deps, "io_bazel_rules_scala_scala_library_2")
use_repo(non_module_deps, "io_bazel_rules_scala_org_openjdk_jmh_jmh_core")
use_repo(non_module_deps, "io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_asm")
use_repo(non_module_deps, "io_bazel_rules_scala_org_openjdk_jmh_jmh_generator_reflection")
Expand Down
62 changes: 9 additions & 53 deletions WORKSPACE.bzlmod
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,6 @@ workspace(name = "io_bazel_rules_scala")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

_build_tools_release = "5.1.0"

http_archive(
name = "com_github_bazelbuild_buildtools",
sha256 = "e3bb0dc8b0274ea1aca75f1f8c0c835adbe589708ea89bf698069d0790701ea3",
strip_prefix = "buildtools-%s" % _build_tools_release,
url = "https://github.com/bazelbuild/buildtools/archive/%s.tar.gz" % _build_tools_release,
)

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

# Declares @com_google_protobuf//:protoc pointing to released binary
# This should stop building protoc during bazel build
# See https://github.com/bazelbuild/rules_proto/pull/36
rules_proto_dependencies()

rules_proto_toolchains()

load("//scala:scala_cross_version.bzl", "default_maven_server_urls")
load("//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge")

Expand Down Expand Up @@ -94,41 +76,9 @@ java_import_external(

## Linting

load("//private:format.bzl", "format_repositories")

format_repositories()

http_archive(
name = "io_bazel_rules_go",
sha256 = "dd926a88a564a9246713a9c00b35315f54cbd46b31a26d5d8fb264c07045f05d",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.38.1/rules_go-v0.38.1.zip",
"https://github.com/bazelbuild/rules_go/releases/download/v0.38.1/rules_go-v0.38.1.zip",
],
)

load(
"@io_bazel_rules_go//go:deps.bzl",
"go_register_toolchains",
"go_rules_dependencies",
)

go_rules_dependencies()

go_register_toolchains(version = "1.19.5")

# Explicitly pull in a different (newer) version of rules_java for remote jdks
rules_java_extra_version = "5.1.0"

rules_java_extra_sha = "d974a2d6e1a534856d1b60ad6a15e57f3970d8596fbb0bb17b9ee26ca209332a"

rules_java_extra_url = "https://github.com/bazelbuild/rules_java/releases/download/{}/rules_java-{}.tar.gz".format(rules_java_extra_version, rules_java_extra_version)

http_archive(
name = "rules_java_extra",
sha256 = rules_java_extra_sha,
url = rules_java_extra_url,
)
# load("//private:format.bzl", "format_repositories")
#
# format_repositories()

load("@rules_java//java:repositories.bzl", "remote_jdk8_repos")

Expand Down Expand Up @@ -176,3 +126,9 @@ repositories(
],
maven_servers = MAVEN_SERVER_URLS,
)

load("//test/toolchains:jdk.bzl", "remote_jdk21_repositories", "remote_jdk21_toolchains")

remote_jdk21_repositories()

remote_jdk21_toolchains()
3 changes: 2 additions & 1 deletion extensions/non_module_deps.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ load(
"@io_bazel_rules_scala//scala/private:macros/scala_repositories.bzl",
_dt_patched_compiler_setup = "dt_patched_compiler_setup",
)
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")

def _non_module_deps_impl(ctx):
_dt_patched_compiler_setup()
_dt_patched_compiler_setup(SCALA_VERSION)
repository(
id = "io_bazel_rules_scala_scala_library",
validate_scala_version = True,
Expand Down
5 changes: 4 additions & 1 deletion scala/private/rules/scala_repl.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,10 @@ def make_scala_repl(*extras):
common_outputs,
*[extra["outputs"] for extra in extras if "outputs" in extra]
),
toolchains = ["@io_bazel_rules_scala//scala:toolchain_type"],
toolchains = [
"@io_bazel_rules_scala//scala:toolchain_type",
"@bazel_tools//tools/jdk:toolchain_type",
],
cfg = scala_version_transition,
incompatible_use_toolchain_transition = True,
implementation = _scala_repl_impl,
Expand Down
2 changes: 2 additions & 0 deletions scala/scala_maven_import_external.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ def _jvm_import_external(repository_ctx):
not repository_ctx.attr.neverlink):
fail("Only use generated_linkable_rule_name if neverlink is set")
name = repository_ctx.attr.repo_name or repository_ctx.attr.generated_rule_name or repository_ctx.name
# HACK: remove the prefix up to the last ~
name = name[name.rfind("~") + 1:]
urls = repository_ctx.attr.jar_urls
if repository_ctx.attr.jar_sha256:
print("'jar_sha256' is deprecated. Please use 'artifact_sha256'")
Expand Down
2 changes: 1 addition & 1 deletion test/proto_cross_repo_boundary/repo.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ def proto_cross_repo_boundary_repository():
native.new_local_repository(
name = "proto_cross_repo_boundary",
path = "test/proto_cross_repo_boundary/repo",
build_file = "test/proto_cross_repo_boundary/repo/BUILD.repo",
build_file = "//test/proto_cross_repo_boundary:repo/BUILD.repo",
)
27 changes: 18 additions & 9 deletions third_party/repositories/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,12 @@ def repositories(
def _alias_repository_impl(rctx):
""" Builds a repository containing just two aliases to the Scala Maven artifacts in the `target` repository. """

# HACK: remove the prefix up to the last ~
name = str(rctx.name)
name = name[name.rfind("~") + 1:]

format_kwargs = {
"name": rctx.name,
"name": name,
"target": rctx.attr.target,
}
rctx.file("BUILD", """alias(
Expand Down Expand Up @@ -138,31 +142,36 @@ def repository(
maven_servers = default_maven_server_urls(),
fetch_sources = True,
validate_scala_version = False):
if validate_scala_version:
repository_scala_version = scala_version_by_major_scala_version[SCALA_MAJOR_VERSION]
if not SCALA_VERSION == repository_scala_version:
fail("Scala config (%s) version does not match repository version (%s)" % (SCALA_VERSION, repository_scala_version))
artifacts = artifacts_by_major_scala_version[SCALA_MAJOR_VERSION]
suffix = version_suffix(SCALA_VERSION)
major_scala_version = extract_major_version(SCALA_VERSION)
default_artifacts = artifacts_by_major_scala_version[major_scala_version]
artifacts = dict(default_artifacts.items())

# workaround to satisfy bzlmod builds
# in a MODULE.bazel file we don't know which scala version is set,
# so we register every possible repo, even if the given version does not require it
print("Registering repository for artifact id: %s hah" % (id + suffix))
if artifacts[id].get("dummy", False) == True:
print("Dummy repository")
dummy_repo(repo_name = id)
else:
_scala_maven_import_external(
name = id,
repo_name = id,
name = id + suffix,
artifact = artifacts[id]["artifact"],
artifact_sha256 = artifacts[id]["sha256"],
licenses = ["notice"],
server_urls = maven_servers,
deps = artifacts[id].get("deps", []),
deps = [dep + suffix for dep in artifacts[id].get("deps", [])],
runtime_deps = artifacts[id].get("runtime_deps", []),
testonly_ = artifacts[id].get("testonly", False),
fetch_sources = fetch_sources,
)

# For backward compatibility: non-suffixed repo pointing to the suffixed one,
# See: https://github.com/bazelbuild/rules_scala/pull/1573
# Hopefully we can deprecate and remove it one day.
_alias_repository(name = id, target = id + suffix)

def _dummy_repo_impl(repository_ctx):
repository_ctx.file("BUILD")

Expand Down

0 comments on commit 344107c

Please sign in to comment.